/
https://42jerrykim.github.io/ _index.md
git reflog가 HEAD의 이동 이력을 별도로 기록해 hard reset이나 브랜치 강제 삭제로 잃어버린 것처럼 보이는 커밋을 되찾는 원리, reflog의 로컬 전용 특성과 만료 기간을 정리한 Git 5부 마무리 챕터다. git stash가 커밋하지 않은 변경을 임시로 치워두고 나중에 복원하는 원리, 스택 구조로 여러 stash를 관리하는 법, 브랜치 전환 시 충돌을 피하는 대표 시나리오와 stash 자체가 커밋으로 구현된다는 사실을 정리한 Git 6부 첫 챕터다. git clean이 .gitignore로도 걸러지지 않는 미추적 파일을 일괄 삭제하는 원리, 되돌릴 수 없는 삭제를 실행하기 전 -n(dry-run)으로 미리 확인해야 하는 이유, -d와 -x 옵션의 범위 차이를 정리한 Git 챕터다. git add -p가 파일 하나를 hunk 단위로 쪼개 일부 변경만 선택적으로 스테이징하는 원리, 대화형 프롬프트의 각 명령(y/n/s/e) 의미, 한 파일에 섞인 서로 다른 목적의 수정을 커밋 단위로 분리하는 실전 절차를 정리한 Git 챕터다. git blame이 파일의 각 줄을 마지막으로 수정한 커밋·작성자·날짜로 연결하는 원리, 이름 변경을 넘어 추적하는 -C/-M 옵션, 대량 서식 변경 커밋을 건너뛰는 ignore-revs 파일 설정을 정리한 Git 챕터다. git bisect가 이분 탐색으로 버그를 처음 만든 커밋을 O(log n) 번의 테스트만으로 찾아내는 원리, good/bad로 범위를 좁히는 절차, 테스트 스크립트를 연결해 전 과정을 자동화하는 run 옵션을 정리한 Git 6부 마무리 챕터다. Git이 .git/objects에 blob·tree·commit 세 가지 객체로 스냅샷을 저장하는 원리, 각 객체가 SHA-1 해시로 식별되고 내용이 같으면 저장 공간을 공유하는 이유, git cat-file로 실제 객체 내용을 직접 들여다보는 법을 정리한 Git 7부 첫 챕터다. 브랜치·태그·HEAD가 모두 커밋 해시를 가리키는 참조(ref)일 뿐이라는 통일된 모델, HEAD가 브랜치를 가리키는 상태와 커밋을 직접 가리키는 detached 상태의 차이, symbolic-ref로 참조 구조를 직접 들여다보는 법을 정리한 Git 챕터다. 34장에서 다룬 개별(loose) 객체가 늘어나면 git gc가 이를 델타 압축된 packfile 하나로 묶어 저장 효율을 높이는 원리, unreachable 객체가 정리되는 기준과 유예 기간, 7부를 마무리하며 지금까지의 내부 구조를 종합하는 챕터다. Git submodule이 한 저장소 안에 다른 저장소를 특정 커밋 단위로 포함시키는 원리, 11장에서 경고했던 중첩 저장소 문제의 정식 해결책인 이유, clone 후 --recurse-submodules가 필요한 이유를 정리한 Git 8부 첫 챕터다.