gyue 님의 블로그

[Learn Git Branching] 다음 단계로 본문

블로그 & 기술문서

[Learn Git Branching] 다음 단계로

gyue 2026. 4. 4. 16:11

개요

Git의 기본 개념(commit, branch, HEAD)을 이해한 이후,
이번 단계에서는 Git의 핵심 동작 방식인 “커밋 사이 이동”과 “HEAD의 역할”에 대해 본격적으로 학습해보았다.

이전 단계에서는 Git의 구조를 이해하는 데 집중했다면, 이번 단계에서는 그 구조를 실제로 움직이며

  • 커밋 간 이동
  • HEAD의 변화
  • 브랜치 위치 조작
  • 작업 되돌리기

까지 다뤄보는 과정이었다.

즉, Git을 단순히 이해하는 것을 넘어 직접 조작할 수 있는 단계로 넘어가는 과정이라고 볼 수 있다.


HEAD의 역할 다시 이해하기

HEAD는 현재 내가 작업 중인 위치를 가리키는 포인터이다.

일반적으로는 다음과 같은 구조를 가진다.

HEAD → 브랜치 → 커밋
 

즉, HEAD는 브랜치를 가리키고,
브랜치는 특정 커밋을 가리킨다.

Git에서 commit, checkout, merge 같은 대부분의 명령어는
이 HEAD를 기준으로 동작하기 때문에
HEAD의 개념을 이해하는 것이 매우 중요하다.


HEAD 분리 (Detached HEAD)

특정 커밋으로 직접 이동하면
HEAD는 브랜치가 아닌 커밋을 직접 가리키게 된다.

 
git checkout C1
 

이 상태를 Detached HEAD 상태라고 한다.

이 상태에서는

브랜치에 속하지 않으며
commit을 해도 브랜치가 이동하지 않고
작업이 고립될 수 있다

즉, 실험적인 작업에는 유용하지만
일반적인 개발 흐름에서는 주의가 필요하다.


상대 참조 (Relative Reference)

Git에서는 커밋을 이동할 때
복잡한 해시값 대신 상대적인 위치로 이동할 수 있다.


^ (부모 커밋)

 
git checkout main^
 

→ main의 바로 이전 커밋으로 이동


~ (여러 단계 이동)

 
git checkout HEAD~3
 

→ 현재 위치에서 3단계 이전 커밋으로 이동


이 기능을 통해
커밋 히스토리를 직관적으로 탐색할 수 있으며,
Git 트리를 더 쉽게 이해할 수 있었다.


HEAD를 기준으로 이동하기

HEAD 자체도 이동 기준으로 사용할 수 있다.

 
git checkout HEAD^
git checkout HEAD~2
 

이 방식은 현재 위치를 기준으로
“시간을 거슬러 올라가는 느낌”으로 커밋을 이동할 수 있게 해준다.


브랜치 강제 이동

브랜치는 단순한 이름이 아니라
특정 커밋을 가리키는 포인터이기 때문에
강제로 위치를 바꿀 수 있다.

 
git branch -f main HEAD~3
 

→ main 브랜치를 현재 위치에서 3단계 이전으로 이동

이 기능은
잘못된 브랜치 흐름을 수정하거나
구조를 정리할 때 매우 유용하다.


Git에서 작업 되돌리기

이번 단계에서는
작업을 되돌리는 두 가지 방법도 학습하였다.

 


git reset

 
git reset HEAD~1
 

현재 브랜치를 이전 커밋으로 이동시킨다.

특징:

히스토리가 변경됨
이전 커밋이 사라진 것처럼 보임
주로 로컬 작업에서 사용

즉, “과거로 되돌리는 방식”이다.


git revert

 
git revert HEAD
 

이전 커밋을 취소하는 새로운 커밋을 생성한다.

 

특징:

히스토리를 유지한다.
협업 환경에서 안전
취소 기록이 남는다.

 

즉, “기록을 유지하면서 되돌리는 방식”이다.


reset과 revert의 차이

이번 단계에서 중요한 포인트는
두 명령어의 차이를 이해하는 것이었다.

reset → 히스토리를 되돌림 (위험하지만 효과적)
revert → 새로운 커밋으로 취소 (안전)

상황에 따라 적절하게 사용하는 것이 중요하다.


이번 단계에서 느낀 점

이번 단계에서는 Git이 단순한 저장 도구가 아니라
위치를 이동하고 흐름을 조작하는 시스템”이라는 것을 느낄 수 있었다.

특히 다음과 같은 점이 인상 깊었다.

  • HEAD를 이해하면 Git 구조가 명확해진다.
  • 브랜치는 단순한 이름이 아니라 위치 정보이다.
  • Git은 커밋을 이동하면서 사용하는 도구이다.
  • 되돌리는 방식도 상황에 따라 다르게 존재한다.

처음에는 개념이 많아 보였지만, HEAD를 중심으로 이해하니
모든 명령어가 하나의 흐름으로 연결되었다.


정리

이번 단계에서 학습한 핵심은 다음과 같다.

  • HEAD는 현재 작업 위치를 나타낸다.
  • detached HEAD 상태가 존재한다.
  • 상대 참조(^, ~)로 커밋 이동이 가능하다.
  • 브랜치는 강제로 이동할 수 있다.
  • reset과 revert는 되돌리는 방식이 다르다.

Git은 “위치 이동과 히스토리 조작”이 핵심이다