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
최신 상태로 복귀