프로필 로고
2026-04-04

Git HEAD

현재 작업 위치를 가리키는 포인터인 HEAD의 이중 참조 구조(HEAD → 브랜치 → 커밋), 커밋 시 HEAD가 브랜치를 따라 이동하는 방식, 그리고 브랜치에서 떨어져 나온 Detached HEAD 상태와 복구 방법을 정리한다.

  • Git

개요

  1. Git은 수많은 커밋이 체인처럼 이어진 히스토리를 관리한다.

  2. 이 중에서 "지금 내가 보고 있는 커밋이 어디인가"를 Git이 항상 알아야 한다.

  3. 그 위치를 가리키는 포인터가 바로 HEAD다.

  4. HEAD는 현재 작업 위치를 가리키는 특수한 포인터다.

  5. 실제로는 .git/HEAD라는 파일 하나로 존재한다.

  6. 이 파일을 열어보면 아래처럼 브랜치 이름을 참조하고 있다.

    ref: refs/heads/main
  7. 즉 HEAD는 브랜치를 가리키고, 브랜치는 커밋을 가리키는 이중 참조 구조다.

  8. 아래처럼 커밋이 쌓일수록 브랜치 포인터가 앞으로 이동하고, HEAD는 브랜치를 따라간다.

    				HEAD
    
    				main
    
    ●──●──●──●
    
          최신 커밋

커밋할 때 HEAD가 움직이는 방식

  1. 새 커밋을 만들면 현재 브랜치 포인터가 새 커밋으로 이동한다.

  2. HEAD는 브랜치를 따라가기 때문에 자동으로 최신 커밋을 가리키게 된다.

    		커밋            커밋
     
    		HEAD              HEAD
    
    		main              main
    
    ●──●──●   ●──●──●──● (새 커밋)
  3. 새 커밋을 만들면 현재 브랜치 포인터가 새 커밋으로 이동한다.

  4. HEAD는 브랜치를 따라가기 때문에 자동으로 최신 커밋을 가리키게 된다.

Detached HEAD

  1. 브랜치가 아닌 커밋을 직접 체크아웃하면 HEAD가 브랜치가 아닌 커밋을 직접 가리키게 된다.

  2. 이 상태를 Detached HEAD라고 부른다.

    git checkout abc1234   # 특정 커밋 해시로 이동
    		HEAD
    
    ●──●──●──●
    
    	      main
    • main 브랜치는 여전히 최신 커밋을 가리키고 있지만, HEAD는 브랜치에서 떨어져 나와 abc1234 커밋을 직접 가리킨다.
  3. 이 상태에서 커밋을 하면 어떤 브랜치에도 속하지 않는 커밋이 생긴다.

  4. 이후 다른 브랜치로 이동하면 그 커밋은 브랜치가 없어 Git이 나중에 삭제할 수 있다.

  5. Detached HEAD 상태에서 작업을 보존하려면 즉시 새 브랜치를 만들어야 한다

    git switch -c my-recovery-branch