# HEAD vs main (+특수 HEAD 종류 정리) --- ## 1. 개요
용어 | 역할 | 예시 |
---|---|---|
`HEAD` | 현재 작업 중인 커밋을 가리키는 포인터 | `HEAD → main` 또는 `HEAD → <커밋 해시>` |
`main` | 기본 브랜치 이름 (Git 2.28+ 기본 브랜치) | `main → C3 커밋` |
항목 | `HEAD` (포인터) | `main` (브랜치) |
---|---|---|
정체 | 특수 포인터 | 이름 있는 참조 |
용도 | "현재 내가 작업 중인 위치" 추적 | 커밋들을 연결하는 선 |
이동 가능성 | ****하나만 존재****, 항상 이동함 | 여러 브랜치 중 하나, 직접 이동 안 함 |
Git 명령어 관련 | `reset`, `checkout`, `reflog` | `merge`, `push`, `checkout` 대상 |
실제 저장 위치 | `.git/HEAD` | `.git/refs/heads/main` |
상태 | 설명 | 결과 |
---|---|---|
Attached HEAD | HEAD가 브랜치를 가리킴 | ✅ 정상 상태 ( `HEAD → main` ) |
Detached HEAD | HEAD가 특정 커밋 해시를 직접 가리킴 | 🌀 브랜치가 아님, 새 커밋은 임시 상태 |
명령어 | 설명 |
---|---|
`git symbolic-ref HEAD` | HEAD가 가리키는 브랜치 경로 확인 |
`cat .git/HEAD` | HEAD 내용 확인 ( `ref: refs/heads/main` ) |
`git log` | HEAD 기준 커밋 히스토리 확인 |
`git reflog` | HEAD 이동 이력 추적 (복구용) |
구분 | `HEAD` | `main` |
---|---|---|
유형 | 포인터 (현재 위치) | 브랜치 이름 |
갯수 | 항상 1개 | 여러 개 가능 |
의미 | 현재 체크아웃된 브랜치/커밋 | 브랜치(커밋 선형 연결) |
이동 가능 여부 | 명령어로 이동 가능 | 직접 이동 불가 (커밋 시 이동) |
이름 | 설명 |
---|---|
`HEAD` | 현재 작업 중인 커밋 (or 브랜치) 포인터 |
`FETCH_HEAD` | `git fetch` 시 받아온 ****원격 커밋 참조**** |
`MERGE_HEAD` | `git merge`진행 중, 병합 대상 커밋 참조 |
`ORIG_HEAD` | 직전의 `HEAD`가 가리키던 위치 백업 (ex. `reset ` 이전 커밋) |
`CHERRY_PICK_HEAD` | `cherry-pick`도중 충돌 시 저장되는 대상 커밋 |
`REBASE_HEAD` | `rebase` 도중 기준이 되는 커밋 저장 |
`.git/HEAD` | 현재 위치 추적 |
`.git/ORIG_HEAD` | reset/merge 전 원래 HEAD |
`.git/FETCH_HEAD` | fetch로 받아온 최신 원격 커밋 위치 |
`.git/MERGE_HEAD` | merge 병합 대상 커밋 |