Skip to main content

HEAD vs main (+특수 HEAD 종류 정리)


1. 개요

용어

역할

예시

HEAD

현재 작업 중인 커밋을 가리키는 포인터

HEAD → main 또는 HEAD → <커밋 해시>

main

기본 브랜치 이름 (Git 2.28+ 기본 브랜치)

main → C3 커밋


2. 개념 비교

항목

HEAD

(포인터)

main

(브랜치)

정체

특수 포인터

이름 있는 참조

용도

"현재 내가 작업 중인 위치" 추적

커밋들을 연결하는 선

이동 가능성

하나만 존재, 항상 이동함

여러 브랜치 중 하나, 직접 이동 안 함

Git 명령어 관련

reset, checkout, reflog

merge, push, checkout 대상

실제 저장 위치

.git/HEAD

.git/refs/heads/main


3. 시각적 예시

A---B---C---D
         ↑
       main
         ↑
       HEAD
  • HEAD → main → D 커밋
  • git checkout mainHEADmain 브랜치를 가리킴
  • git checkout <커밋 해시>HEADDetached 상태

4. HEAD의 두 가지 상태

상태

설명

결과

Attached HEAD

HEAD가 브랜치를 가리킴

✅ 정상 상태 (

HEAD → main

)

Detached HEAD

HEAD가 특정 커밋 해시를 직접 가리킴

🌀 브랜치가 아님, 새 커밋은 임시 상태

git checkout main       # HEAD → main
git checkout a1b2c3d    # HEAD → a1b2c3d (Detached)

5. 관련 명령어

명령어

설명

git symbolic-ref HEAD

HEAD가 가리키는 브랜치 경로 확인

cat .git/HEAD

HEAD 내용 확인 (

ref: refs/heads/main

)

git log

HEAD 기준 커밋 히스토리 확인

git reflog

HEAD 이동 이력 추적 (복구용)


6. 요약 비교표

구분

HEADmain

유형

포인터 (현재 위치)

브랜치 이름

갯수

항상 1개

여러 개 가능

의미

현재 체크아웃된 브랜치/커밋

브랜치(커밋 선형 연결)

이동 가능 여부

명령어로 이동 가능

직접 이동 불가 (커밋 시 이동)


7. 특수 HEAD 종류 정리

이름

설명

HEAD

현재 작업 중인 커밋 (or 브랜치) 포인터

FETCH_HEAD

git fetch 시 받아온 원격 커밋 참조

MERGE_HEAD

git merge진행 중, 병합 대상 커밋 참조

ORIG_HEAD

직전의 HEAD가 가리키던 위치 백업 (ex. reset 이전 커밋)

CHERRY_PICK_HEAD

cherry-pick도중 충돌 시 저장되는 대상 커밋

REBASE_HEAD

rebase 도중 기준이 되는 커밋 저장


8. 활용 예시

git reset --hard ORIG_HEAD   # 직전 상태로 롤백

git merge feature            # 병합 시 MERGE_HEAD 생성됨
cat .git/MERGE_HEAD          # 병합 대상 커밋 확인

git fetch origin             # FETCH_HEAD 갱신
cat .git/FETCH_HEAD

요약

.git/HEAD

현재 위치 추적

.git/ORIG_HEAD

reset/merge 전 원래 HEAD

.git/FETCH_HEAD

fetch로 받아온 최신 원격 커밋 위치

.git/MERGE_HEAD

merge 병합 대상 커밋