Part 1 0 / 9 챕터 완료
Chapter 05

HEAD & 히스토리 탐색

커밋 이력을 읽고, HEAD가 무엇인지 이해하고, 과거로 이동하는 방법을 배웁니다.

🎯 이 챕터를 마치면
  • git log의 다양한 옵션을 활용할 수 있다
  • HEAD가 무엇을 가리키는지 이해한다
  • HEAD^, HEAD~N을 사용해서 과거 커밋을 참조할 수 있다
  • Detached HEAD 상태가 무엇인지 알고 대처할 수 있다

📜 1. git log — 커밋 이력 보기

Git Bash — 자주 쓰는 log 옵션
# 기본 log (상세)
$ git log

# 한 줄로 간략하게
$ git log --oneline
b7d9e1f docs: README에 프로젝트 제목 추가
a3f82bc feat: README.md 추가

# 브랜치 그래프 포함
$ git log --oneline --graph

# 모든 브랜치 보기
$ git log --oneline --graph --all

# 최근 3개만
$ git log -3 --oneline

git log 출력 읽는 법

git log 출력 해석
commit b7d9e1f3a2c8d9... ← SHA-1 해시 (고유 ID)
Author: 홍길동 <hong@example.com> ← user.name, user.email
Date: Thu Feb 27 17:00:00 2025 ← 커밋 시각
docs: README에 프로젝트 제목 추가 ← 커밋 메시지

🎯 2. HEAD란?

HEAD는 "지금 내가 작업하고 있는 위치"를 가리키는 특별한 포인터입니다.

HEAD의 역할
b7d9e1f docs: README 업데이트
HEAD main
a3f82bc feat: README.md 추가
HEAD는 항상 현재 브랜치의 최신 커밋을 가리킵니다

HEAD 참조 방법

표현 의미 예시
HEAD 현재 위치 (최신 커밋) 현재 브랜치의 마지막 커밋
HEAD^ 바로 이전 커밋 직전 부모 커밋
HEAD~2 2번째 이전 커밋 두 단계 이전
HEAD~N N번째 이전 커밋 N단계 이전
Git Bash
# 특정 커밋 상태로 이동 (탐색 목적)
$ git checkout HEAD~2
Note: switching to 'HEAD~2'.
You are in 'detached HEAD' state...

# 다시 최신으로 돌아오기
$ git checkout main

⚠️ 3. Detached HEAD 상태

브랜치가 아닌 특정 커밋으로 이동하면 Detached HEAD 상태가 됩니다.

Detached HEAD — 브랜치와 분리된 상태
✅ 정상 상태
● c3 HEAD main
● c2
● c1
⚠️ Detached HEAD 상태
● c3 main
● c2 HEAD ← 브랜치와 분리!
● c1
⚠️

Detached HEAD 상태에서 작业한 내용을 저장하려면 반드시 새 브랜치를 만들어야 합니다.

Git Bash
# Detached HEAD에서 새 브랜치 생성
$ git branch feature/explore
$ git switch feature/explore

# 또는 한 번에
$ git switch -c feature/explore
✅ 이해도 체크
git log --oneline --graph --all의 출력을 읽을 수 있다
HEAD가 무엇을 가리키는지 설명할 수 있다
HEAD~2가 어떤 커밋인지 이해한다
Detached HEAD 상태에서 어떻게 대처하는지 안다
📌 이 챕터 명령어
git log --oneline
간략한 커밋 이력
git log --oneline --graph --all
모든 브랜치 그래프 포함
git show 커밋ID
특정 커밋 상세 정보
git checkout HEAD~N
N번 이전 커밋으로 이동
git checkout main
최신 상태로 복귀