Commit
: 커밋을 하는 것 == 파일 전체에 대한 것(스냅샷)을 저장한 것
.git/objects
에 저장된 모습을 보면 커밋들은00
,01
.. hash값의 dir + 파일로 이루어져있다.결국 파일 전체 하나(스냅샷)를 가리키는 것. 추후 gc로부터 하나의 델타로 변경된다.
하나의 브랜치 또한 하나의 커밋에 대한 참조. -> 수백개의 branch로 관리되어도 성능 저하되지 않는 이유
Git의 상태
: 작업 디렉토리, 스테이지, head 커밋은 상황에 따라 위에 보여지는 하나의 같은 파일을 가리키게 된다.
- Clean한 상태: 작업 디렉토리 == 스테이지 == HEAD 커밋
- Modified: 작업 디렉토리 != 스테이지 == 헤드커밋
- add한 상태: 작업 디렉토리 == 스테이지 != 헤드커밋
- 커밋한 상태: Clean한 상태
CLI로 확인
git ls-files --stage
,git ls-tree HEAD
를 찍어보면, stage에 올라온 파일과 HEAD가 참조하는 파일이 같음을 확인할 수 있다.
.git/
: git의 저장소, git으로 관리하는 커밋, 설정 등이 들어있다.
- log, remote 정보, branch 등의 참조가 있다.
- 이 config에서 수정해주면
git config --list
에서 보이는 설정들이 변경된다.