Study/Git 스터디

Git 기초 정리

알 수 없는 사용자 2024. 1. 26. 15:31

https://learngitbranching.js.org/?locale=ko

Commit 커밋

커밋은 Git 저장소의 디렉토리에 있는 모든 파일에 대한 스냅샷으로 기록합니다. Git은 가능한 한 커밋을 가볍게 유지하고자 하기에 커밋 할 때 전체 디렉토리를 복사하지 않습니다. 각 커밋은 저장소의 이전 버전과 다음 버전의 변경 내용(delta)만 저장합니다. 그래서 대부분의 커밋이 그 커밋 위의 부모 커밋을 가르킵니다. 

 

*스냅샷 : 특정 시간에 데이터 저장 장치의 상태를 별도의 파일이나 이미지로 저장하는 기술

C0, C1, C2...는 '커밋'을 의미합니다.

 

Branch 브랜치

브랜치는 특정 커밋에 대한 참조(reference)기에 메모리나 디스크 공간에 부담이 되지 않습니다. 브랜치는 하나의 커밋이며, 부모 커밋을 포함하는 작업 내역이라고 볼 수 있습니다. 

 

Git Commit의 세 가지 상태 

Working Directory: 작업공간

프로젝트의 특정 버전을 Checkout 한 상태입니다. 즉, 사용자의 작업공간으로 로컬 저장소에 접근이 가능하며 실제 파일을 수정하거나 생성하는 공간입니다. Git Directory는 지금 작업하는 디스크에 있고 그 디렉터리 안에 압축된 데이터베이스에서 파일을 가져와 Working Directory를 만듭니다. 

 

Untracted: 비추적 상태 

아직 tracking이 되지 않은 파일을 의미합니다. 

Tracked: 추적 상태 

trackd 상태의 파일들은 git에 의해서 파일의 변경 이력이 추적됩니다. 모든 파일의 변경 이력을 추적할 경우 시스템의 부하가 커지게 되므로, git에서 요청받은 파일들의 변경 이력을 추적하게 됩니다. 

  • Modified 상태 
    워킹 디렉토리 내의 tracked 상태의 파일을 수정하게 되는 경우, Git의 스테이지는 파일 상태를 modified 상태로 변경합니다. modified상태의 파일은 스테이지 영역에서 제외되며 스테이지 영역으로 재등록하기 위해서는 git add 명령어를 다시 사용해야 합니다. 
  • Unmodified 상태
    tracked 상태이며 스테이지에서 한번도 수정하지 않은 원본을 의미합니다. 

Staging Area

Tracked 상태의 파일들을 관리 및 임시로 저장하는 공간입니다. 스테이지 영역에서는 파일의 콘텐츠 내용을 직접 가지고 있는 것이 아닌, 커밋하려는 파일의 추적 상태 정보들만 기록합니다. 

  • Stage 상태 
    stage 영역에 들어온 파일들은 모두 tracked 상태의 파일입니다. 
  • Unstage 상태 
    파일의 변화가 있을 경우 해당 파일은 unstage 상태가 됩니다. 스테이지 영역으로 등록하지 않은 워킹 디렉토리 내의 파일들도 unstage 상태라고 생각할 수 있습니다. 

스테이지 영역에서는 tracked 상태와 unmodified 상태의 파일들만 존재합니다. 워킹 디렉토리에서는 untracked 상태와 modified/unodified 상태의 파일들만 존재합니다. 

 

Head

head는 현재 내가 바라보고 있는 commit을 가리킨다. 

 

Rebase

한 브랜치에서 다른 브랜치로 합치는 방법에는 Merge와 Rebase가 있습니다. 둘의 실행 결과는 같지만, 커밋 히스토리에 차이가 있습니다. Merge는 쉽고 안전하지만 커밋 히스토리가 지저분할 수 있는 반면, Rebase는 까다롭지만 커밋 히스토리를 깔끔하게 관리할 수 있다는 장점을 가지고 있습니다. 

Rebase는 base를 새롭게 설정하다는 의미로 이해할 수 있습니다. 

혼자서 작업을 하는 경우에는 문제가 없으나, 협업 중인 상황에서는 문제가 생길 수 밖에 없습니다. 

 

Revert와 Reset 

온라인 저장소에 올라간 다른 사람의 코드 유(Revert)무(Reset)에 따라 달라집니다. 

 

Reset

origin에 올리지 않고 로컬에 커밋이 머물러 있다면, 혹은 홀로 해당 브랜치를 사용할 경우 Reset을 사용할 수 있습니다. git reset HEAD^

Reset의 옵션 

  • hard: 돌아간 커밋 이후의 변경 이력을 모두 삭제합니다. 
  • mixed: 변경 이력은 모두 삭제하지만 변경 내용은 남아있습니다. 
  • soft: 변경 이력은 모두 삭제하지만 변경 내용은 stage에 남아있습니다.