Skip to main content

Git 명령어에 따른 .git 내부 구조 변화 (2부)


4. git stash 시 내부 변화

4.1 예시 명령어

git stash

4.2 .git 내부 변화

구성 요소

변화 내용

.git/objects/

현재 작업 상태(스냅샷)가 stash용 커밋으로 저장됨 (2~3개의 커밋 객체)

.git/logs/refs/stash

새로운 stash가 추가된 로그 생성

.git/refs/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 내부 변화

구성 요소

변화 내용

.git/objects/

cherry-pick된 커밋 내용 기반으로 새 커밋 객체 생성

.git/CHERRY_PICK_HEAD

대상 커밋의 해시 저장 (충돌 발생 시 사용됨)

.git/HEAD

현재 브랜치에 새 커밋 추가

.git/index

병합 결과 반영

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 내부 변화

구성 요소

변화 내용

.git/objects/

revert용 새 커밋 객체 생성

.git/index

C의 반대 연산 내용 반영

.git/HEAD

새 커밋으로 이동

revert는 원본 커밋을 삭제하지 않고, "반대로 되돌리는" 커밋을 추가한다.

6.3 도식 예시

A---B---C ← HEAD

▶ git revert C

결과:

A---B---C---C' ← HEAD (C를 무효화하는 커밋)

7. 특수 파일 요약 (2부)

파일 이름

생성 명령어

설명

.git/CHERRY_PICK_HEAD

git cherry-pick

적용 중인 커밋 해시 저장 (충돌 시 사용)

.git/REVERT_HEAD

git revert (중단 시)

revert 진행 중인 커밋 정보

.git/refs/stash

git stash

가장 최근 stash 참조

.git/logs/refs/stash

git stash

stash 추가 이력 저장


8. 요약 비교표 (2부)

명령어

새 커밋 생성

기존 커밋 삭제

HEAD 이동

특수 파일

비고

stash

O (임시 커밋)

refs/stash

작업 보관

cherry-pick

O

O

CHERRY_PICK_HEAD

선택 커밋 복사

revert

O

O

REVERT_HEAD

기존 커밋 반전