Git을 변경 이력을 commit으로 연결해 로컬에 보관하는 분산 버전 관리 시스템으로 소개하고, HEAD와 branch가 실제로 어떤 commit을 가리키는지에 초점을 둔다. 명령을 외우게 하기보다 각 명령이 내부 상태를 어떻게 바꾸는지에 연결해, 헷갈리기 쉬운 동작의 원리를 잡아준다.
핵심 포인트- commit은 특정 시점의 변경 기록, branch는 commit을 가리키는 이동 가능한 이름, HEAD는 현재 작업 기준이 되는 branch나 commit
- git init이 .git 메타데이터 영역을 만들고, add로 staging area에 올린 뒤 reset으로 조정하고 commit으로 선택한 변경 집합을 하나의 이력으로 기록 — status로 tracked/untracked를 구분하고 .gitignore로 제외, commit -a는 범위 확인 후 사용
- checkout으로 branch에 연결되면 attached, 특정 commit을 직접 선택하면 detached HEAD가 되며, reflog가 HEAD·branch의 이동 기록으로 잃어버린 듯한 commit을 되찾는 단서 — branch 생성·reset은 참조 위치를 바꾸므로 hard 옵션은 신중히
- 두 branch의 최신 commit과 공통 조상을 비교하는 three-way merge로 변경을 합치고, 같은 구간 충돌 시 conflict 표시를 정리·재staging한 뒤 merge commit으로 완료
왜 읽나명령만 외워 쓰다 detached HEAD나 reset·merge에서 당황하는 입문자에게, 각 명령이 HEAD·branch·staging을 어떻게 움직이는지 내부 상태로 이해시켜주는 기초 정리.