HEAD vs main (+특수 HEAD 종류 정리)
1. 개요
용어 | 역할 | 예시 |
---|---|---|
| 현재 작업 중인 커밋을 가리키는 포인터 |
|
| 기본 브랜치 이름 (Git 2.28+ 기본 브랜치) |
|
2. 개념 비교
항목 | HEAD (포인터) | main (브랜치) |
---|---|---|
정체 | 특수 포인터 | 이름 있는 참조 |
용도 | "현재 내가 작업 중인 위치" 추적 | 커밋들을 연결하는 선 |
이동 가능성 | 하나만 존재, 항상 이동함 | 여러 브랜치 중 하나, 직접 이동 안 함 |
Git 명령어 관련 |
|
|
실제 저장 위치 |
|
|
3. 시각적 예시
A---B---C---D
↑
main
↑
HEAD
HEAD → main → D 커밋
git checkout main
→HEAD
가main
브랜치를 가리킴git checkout <커밋 해시>
→HEAD
가 Detached 상태
4. HEAD의 두 가지 상태
상태 | 설명 | 결과 |
---|---|---|
Attached HEAD | HEAD가 브랜치를 가리킴 | ✅ 정상 상태 (
) |
Detached HEAD | HEAD가 특정 커밋 해시를 직접 가리킴 | 🌀 브랜치가 아님, 새 커밋은 임시 상태 |
git checkout main # HEAD → main
git checkout a1b2c3d # HEAD → a1b2c3d (Detached)
5. 관련 명령어
명령어 | 설명 |
---|---|
| HEAD가 가리키는 브랜치 경로 확인 |
| HEAD 내용 확인 (
) |
| HEAD 기준 커밋 히스토리 확인 |
| HEAD 이동 이력 추적 (복구용) |
6. 요약 비교표
구분 | HEAD | main |
---|---|---|
유형 | 포인터 (현재 위치) | 브랜치 이름 |
갯수 | 항상 1개 | 여러 개 가능 |
의미 | 현재 체크아웃된 브랜치/커밋 | 브랜치(커밋 선형 연결) |
이동 가능 여부 | 명령어로 이동 가능 | 직접 이동 불가 (커밋 시 이동) |
7. 특수 HEAD 종류 정리
이름 | 설명 |
---|---|
| 현재 작업 중인 커밋 (or 브랜치) 포인터 |
|
|
|
|
| 직전의 |
|
|
|
|
8. 활용 예시
git reset --hard ORIG_HEAD # 직전 상태로 롤백
git merge feature # 병합 시 MERGE_HEAD 생성됨
cat .git/MERGE_HEAD # 병합 대상 커밋 확인
git fetch origin # FETCH_HEAD 갱신
cat .git/FETCH_HEAD
요약
| 현재 위치 추적 |
| reset/merge 전 원래 HEAD |
| fetch로 받아온 최신 원격 커밋 위치 |
| merge 병합 대상 커밋 |