- Published on
Git 명령을 외우면 매번 검색하게 되지만, 데이터 모델을 알면 명령의 동작이 추론됩니다. 이 글은 blob과 tree와 commit과 tag라는 네 가지 객체, 같은 내용이 언제나 같은 해시를 갖는 콘텐츠 주소 지정, 브랜치가 41바이트짜리 파일에 불과하다는 사실, 그리고 인덱스가 실제로 무엇을 담고 있는지를 cat-file과 ls-files로 직접 열어 보며 확인합니다. 이 모델을 알면 reset이 왜 포인터 이동인지, rebase가 왜 커밋을 옮기지 않고 새로 만드는지, cherry-pick이 왜 충돌하는지, detached HEAD가 무엇인지가 전부 하나의 그림에서 설명됩니다. 마지막으로 SHA-1 충돌 공격에 Git이 어떻게 대응했고 SHA-256 전환이 지금 어디까지 와 있는지 정리했습니다.