Git— 스냅샷으로 이해하는 버전 관리
개념 해설 · Concept Guide

Git

Git을 명령어 모음으로 외우면 언젠가 막힌다. 커밋이 무엇인지, 브랜치가 어디를 가리키는지, HEAD가 어떻게 움직이는지 — 그 그림을 한 번 그려두면 모든 명령이 같은 모형 위의 작은 동작으로 보인다. 이 책은 Git을 커밋 그래프 위의 움직임으로 다시 가르친다.

Git 버전 관리 커밋 그래프 협업
1부모형 — Git이 데이터를 보는 방식
01장

스냅샷과 커밋

Git은 변경분(diff)이 아니라 스냅샷을 저장한다. 커밋은 트리·부모·메시지를 묶은 불변 객체이며, SHA 해시가 그 정체성이다.

커밋스냅샷SHA
02장

브랜치와 HEAD

브랜치는 무겁지 않다 — 그저 커밋 하나를 가리키는 41바이트 포인터다. HEAD는 "지금 내가 선 자리"를 가리키는 포인터의 포인터다.

브랜치HEAD포인터
2부합치기 — 갈라진 히스토리를 다시 모으는 법
03장

병합 — merge와 fast-forward

fast-forward는 포인터를 앞으로 미는 것뿐이다. 진짜 병합은 부모가 둘인 머지 커밋을 만든다. 둘의 차이를 그래프로 본다.

mergefast-forward
04장

리베이스 — 히스토리 다시 쓰기

리베이스는 커밋을 복사해 다른 베이스 위에 다시 심는다. 히스토리는 깔끔해지지만, 원본 커밋은 사라진다 — 그 대가를 안다.

rebase히스토리
05장

원격 저장소 — fetch · push · pull

원격은 또 하나의 저장소일 뿐이다. fetch는 가져오고, push는 보내고, pull은 fetch + merge다. 원격 추적 브랜치의 정체를 밝힌다.

remotefetchpush
3부되돌리기와 운영 — 안전하게 다루는 법
06장

되돌리기 — reset · revert · checkout

"되돌린다"는 한 가지가 아니다. reset은 포인터를 옮기고, revert는 새 커밋으로 무효화하고, restore는 작업 트리를 고친다.

resetrevertrestore
07장

충돌 해결과 스태시

충돌은 오류가 아니라 Git이 "여기는 사람이 판단하라"고 멈춘 지점이다. 충돌 마커를 읽는 법과 stash로 작업을 잠시 치워두는 법.

conflictstash
08장

태그와 릴리스 워크플로

태그는 움직이지 않는 이름표 — 특정 커밋을 영구히 가리킨다. 경량 태그와 주석 태그, 그리고 팀이 함께 쓰는 브랜치 전략까지.

tagreleaseworkflow