Git 명령어에 따른 .git 내부 구조 변화 (2부)
4. git stash
시 내부 변화
4.1 예시 명령어
git stash
4.2 .git
내부 변화
구성 요소 | 변화 내용 |
---|---|
| 현재 작업 상태(스냅샷)가 |
| 새로운 stash가 추가된 로그 생성 |
| 가장 최신 stash를 가리키는 포인터 (없으면 새로 생성됨) |
.git/
├── objects/ ← stash 내용 포함 커밋 객체 추가
├── refs/stash ← 최신 stash 참조
├── logs/refs/stash ← stash 이력 저장
4.3 도식 예시
main: A---B---C
↑
HEAD / index
▶ git stash
결과:
- 워킹 디렉토리와 인덱스 초기화됨
- .git/refs/stash → stash 커밋 가리킴
5. git cherry-pick
시 내부 변화
5.1 예시 명령어
git cherry-pick a1b2c3d
5.2 .git
내부 변화
구성 요소 | 변화 내용 |
---|---|
| cherry-pick된 커밋 내용 기반으로 새 커밋 객체 생성 |
| 대상 커밋의 해시 저장 (충돌 발생 시 사용됨) |
| 현재 브랜치에 새 커밋 추가 |
| 병합 결과 반영 |
5.3 도식 예시
main: A---B---C ← HEAD
feature: D---E ← cherry-pick 대상
▶ git cherry-pick E
결과:
main: A---B---C---E' ← HEAD
E와 동일한 내용이지만 새 커밋 E′가 만들어짐
6. git revert
시 내부 변화
6.1 예시 명령어
git revert C
6.2 .git
내부 변화
구성 요소 | 변화 내용 |
---|---|
| revert용 새 커밋 객체 생성 |
| C의 반대 연산 내용 반영 |
| 새 커밋으로 이동 |
revert
는 원본 커밋을 삭제하지 않고, "반대로 되돌리는" 커밋을 추가한다.
6.3 도식 예시
A---B---C ← HEAD
▶ git revert C
결과:
A---B---C---C' ← HEAD (C를 무효화하는 커밋)
7. 특수 파일 요약 (2부)
파일 이름 | 생성 명령어 | 설명 |
---|---|---|
|
| 적용 중인 커밋 해시 저장 (충돌 시 사용) |
|
| revert 진행 중인 커밋 정보 |
|
| 가장 최근 stash 참조 |
|
| stash 추가 이력 저장 |
8. 요약 비교표 (2부)
명령어 | 새 커밋 생성 | 기존 커밋 삭제 | HEAD 이동 | 특수 파일 | 비고 |
---|---|---|---|---|---|
| O (임시 커밋) | ❌ | ❌ |
| 작업 보관 |
| O | ❌ | O |
| 선택 커밋 복사 |
| O | ❌ | O |
| 기존 커밋 반전 |