Git 명령어에 따른 .git 내부 구조 변화(1부)
1. git merge
시 내부 변화
1.1 예시 명령어
git checkout main
git merge feature
1.2 .git
내부 변화
구성 요소 | 변화 내용 |
---|---|
| 병합 결과로 새로운 merge commit 객체 생성 |
| 브랜치 포인터가 merge 커밋으로 이동 |
| 여전히 |
| 병합 대상 커밋( |
| HEAD의 이동 이력 반영됨 (reflog) |
1.3 도식 예시
A---B---C ← main
\
D---E ← feature
▶ git merge feature
결과:
A---B---C-------M (merge commit) ← main, HEAD
\ /
D---E
2. git rebase
시 내부 변화
2.1 예시 명령어
git checkout feature
git rebase main
2.2 .git
내부 변화
구성 요소 | 변화 내용 |
---|---|
|
|
| 브랜치가 새 커밋들로 덮어씀 |
| 리베이스 기준 커밋을 기록 |
| 여전히 |
| HEAD의 커밋 재작성 이력 반영됨 |
2.3 도식 예시
main: A---B---C
feature: D---E
▶ git rebase main
결과:
main: A---B---C
feature: D'---E' ← HEAD
원래 커밋 D, E는 삭제되지 않고
.git/objects
에 보존됨
3. git reset
시 내부 변화
3.1 예시 명령어
git reset --hard HEAD~1
3.2 .git
내부 변화
구성 요소 | 변화 내용 |
---|---|
| 브랜치 포인터가 이전 커밋으로 이동 |
| 여전히 |
| 되돌린 커밋 시점으로 스테이징 영역 초기화 |
작업 디렉토리 |
|
| 이전 HEAD 커밋 해시를 저장 |
| 이동 전후 이력 기록됨 |
3.3 도식 예시
A---B---C ← main, HEAD
↑
ORIG_HEAD
▶ git reset --hard B
결과:
A---B ← main, HEAD
4. 특수 HEAD 파일 요약
파일 이름 | 생성 시점 | 설명 |
---|---|---|
|
| 병합 대상 커밋 해시 저장 |
|
| 기준 커밋 해시 저장 |
|
| 리셋 전 커밋 백업 |
|
| 원격에서 받아온 커밋들 정보 |
|
| 적용 대상 커밋 기록 |
5. 요약 비교표
명령어 | 커밋 이동 | 브랜치 이동 | HEAD 변경 | 디렉토리 영향 | 특수 파일 생성 |
---|---|---|---|---|---|
| ⭕ | ⭕ | ⭕ | 충돌 시 변동 있음 |
|
| ⭕ (rewrite) | ⭕ | ⭕ | 충돌 시 변동 있음 |
|
| ⭕ (이전 커밋으로) | ⭕ | ⭕ | ✔️ 완전 초기화 |
|