Git HEAD와 브랜치, 그리고 git reset 한 번에 이해하기

DevBison·2026년 1월 8일

Git을 쓰다 보면 자주 보게 되는 개념이 있다.

  • HEAD
  • 브랜치(branch)
  • git reset

처음에는 각각 따로 외워야 할 것처럼 보이지만,
사실은 “포인터가 어디를 가리키고 있느냐” 하나로 연결된 개념이다.


1. 브랜치란 무엇인가

브랜치는 커밋을 가리키는 포인터다.
즉, 브랜치는 “이 커밋을 기준으로 작업 중이다”라는 표시다.

브랜치 구조 예시

A --- B --- C   (main)
  • A, B, C는 커밋
  • main 브랜치는 가장 최신 커밋 C를 가리킨다

이 상태에서 새로운 커밋을 만들면:

A --- B --- C --- D   (main)

main 브랜치는 자동으로 D로 이동한다.
브랜치는 “고정된 개념”이 아니라 계속 움직이는 포인터다.


2. HEAD는 무엇인가

HEAD는 “현재 내가 보고 있는 위치”를 가리키는 포인터다.

대부분의 경우 HEAD는 브랜치를 가리킨다.

HEAD -> main -> C

의미를 풀면:

  • 나는 main 브랜치를 체크아웃했고
  • main은 C 커밋을 가리키고 있으며
  • 현재 작업 디렉토리는 C 기준이다

중요한 포인트는 이것이다.

  • 브랜치는 커밋을 가리킨다
  • HEAD는 브랜치를 가리킨다

즉,
HEAD → 브랜치 → 커밋
이 구조로 이어진다.


3. git reset은 무엇을 하는가

git reset은 브랜치가 가리키는 커밋 위치를 옮기는 명령이다.

즉,

  • HEAD를 움직이는 것이 아니라
  • 브랜치 포인터 자체를 과거 커밋으로 이동시킨다

reset 전 상태

A --- B --- C   (main)
              ^
             HEAD

reset 후 상태

A --- B   (main)
          ^
         HEAD

C 커밋이 “사라진 것처럼” 보이지만,
정확히 말하면 main 브랜치가 B로 이동한 것이다.


4. reset을 하면 왜 HEAD도 같이 이동할까?

HEAD는 항상 “현재 체크아웃된 브랜치”를 따라간다.

  • HEAD → main
  • main이 가리키는 커밋이 바뀌면
  • 결과적으로 HEAD 기준 커밋도 바뀐다

그래서 reset 결과를 보면
“HEAD가 이동한 것처럼” 느껴지는 것이다.


5. git checkout과의 차이

많이 헷갈리는 부분이라 같이 정리해본다.

git reset

  • 브랜치 포인터를 이동시킨다
  • 브랜치 기준 자체가 바뀐다
  • 히스토리를 되돌리는 느낌

git checkout

  • HEAD를 다른 브랜치나 커밋으로 이동시킨다
  • 브랜치는 그대로 둔다

checkout으로 커밋을 직접 찍는 경우

HEAD -> C
main -> D

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

이 상태에서 커밋을 만들면
브랜치에 연결되지 않은 “떠 있는 커밋”이 되기 때문에 주의가 필요하다.


6. 이 개념이 중요한 이유

이 구조를 이해하면 다음이 명확해진다.

  • 왜 reset을 하면 커밋이 사라진 것처럼 보이는지
  • 왜 checkout으로 과거 커밋을 보면 경고가 뜨는지
  • 왜 브랜치를 기준으로 작업하는 것이 중요한지

Git은 결국
“포인터를 어디로 옮기느냐”의 문제다.


7. 한 번에 정리

개념역할
커밋작업 스냅샷
브랜치특정 커밋을 가리키는 포인터
HEAD현재 사용 중인 브랜치를 가리키는 포인터
git reset브랜치 포인터를 과거로 이동
git checkoutHEAD를 다른 위치로 이동

profile
응애 개발자

0개의 댓글