왜 C6이 아니라 C7이 생성됐을까?
- Git 시각화 툴에서
bugFix
브랜치에서git commit
을 실행했더니, 새로운 커밋이C6
이 아니라C7
로 만들어짐. C6
은 존재하지만 흐릿하게 표시되고, 어떤 브랜치에서도 이어지지 않음.
git checkout HEAD^ 수행 직후
git checkout bugFix 수행 직후
git commit 수행 직후
현재 상황 정리
- C5 이후에 커밋이 생성됨.
- C6은 있지만 밝은 색으로 표시되어 있고, 커밋 라인이 연결되지 않음.
- 현재 HEAD는
bugFix
브랜치에 있고, 별표(*)로 표시되어 있음. - 새 커밋은 C7으로 기록됨.
🔍 왜 C6이 아니라 C7일까?
1. HEAD가 어디에 있는지가 중요
- Git에서 커밋을 하면 항상
HEAD
가 가리키는 브랜치 기준으로 커밋이 생긴다.
git commit
- 이 명령은 현재
HEAD
가 가리키는 브랜치 위에 커밋을 생성한다. - 현재
HEAD → bugFix
였기 때문에, 커밋은 C5 → C7으로 이어졌음.
2. C6은 HEAD
가 가리키는 경로에 있지 않다
- C6는
git checkout
이나rebase
도중 임시로 생겼다가 현재 브랜치 기준에서는 더 이상 이어지지 않은 과거 커밋이다. - 브랜치나 다른 커밋에서 참조하지 않는 커밋은 garbage collection 대상이 된다.
- 즉, C6은 예전에 생성됬지만 예전에 생성됐지만 현재 브랜치나 HEAD가 가리키지 않는 고아 커밋이다.
- C7이 bugFix 브랜치에서 새롭게 커밋한 결과물이다.
시각화 기반 구조
C4 (main)
↑
C2 ←───────┐
│
C1 │
↑ ↓
C0 C3 ← C5 ← C7 (HEAD → bugFix)
↖
C6 (고아 커밋)
참고 명령어
# 현재 브랜치 및 HEAD 확인
git branch
git status
# 모든 브랜치와 커밋 로그 확인
git log --graph --oneline --all