마인드맵
Git 내부 구조
├── 1. Working Directory
│ └── 실제 작업 공간 (코드 작성, 수정)
│
├── 2. Index (Staging Area) ← .git/index
│ └── git add로 관리됨
│
├── 3. Local Repository (.git/)
│ ├── 3.1 objects/
│ │ ├── blob: 파일 내용
│ │ ├── tree: 디렉토리 구조
│ │ └── commit: 스냅샷 + 부모 참조 + 메타
│ │
│ ├── 3.2 refs/
│ │ ├── heads/: 브랜치 포인터
│ │ ├── remotes/: 원격 브랜치
│ │ └── tags/: 태그 포인터
│ │
│ ├── 3.3 HEAD
│ │ ├── 현재 브랜치 참조 (예: ref: refs/heads/main)
│ │ └── detached 상태 가능
│ │
│ ├── 3.4 logs/
│ │ └── HEAD 및 refs의 이동 이력 (reflog)
│ │
│ ├── 3.5 config
│ │ └── 사용자 설정 정보
│ │
│ ├── 3.6 hooks/
│ │ └── pre-commit, post-commit 등 자동화 스크립트
│ │
│ └── 3.7 특수 HEAD 파일
│ ├── MERGE_HEAD ← merge 중 생성
│ ├── REBASE_HEAD ← rebase 중 생성
│ ├── ORIG_HEAD ← reset 전 위치 백업
│ ├── CHERRY_PICK_HEAD ← cherry-pick 중 충돌 시
│ ├── REVERT_HEAD ← revert 충돌 시
│ └── FETCH_HEAD ← fetch 결과
│
├── 4. 명령어 동작 흐름
│ ├── git add
│ │ └── 파일 → index 등록
│ ├── git commit
│ │ ├── index → commit 객체 생성
│ │ └── 브랜치 포인터 → 새 커밋
│ ├── git reset
│ │ ├── HEAD/브랜치 포인터 이동
│ │ └── --hard 시 index + 작업 디렉토리도 초기화
│ ├── git merge
│ │ ├── merge commit 생성
│ │ └── MERGE_HEAD 기록
│ ├── git rebase
│ │ ├── 커밋 재작성 (rewrite)
│ │ └── REBASE_HEAD 기록
│ ├── git cherry-pick
│ │ ├── 커밋 복사
│ │ └── CHERRY_PICK_HEAD 기록
│ ├── git revert
│ │ ├── 반전 커밋 추가
│ │ └── REVERT_HEAD 기록
│ └── git stash
│ ├── 현재 상태를 임시 커밋으로 보관
│ ├── refs/stash 생성
│ └── logs/refs/stash 이력 저장
│
└── 5. 복구 및 확인
├── git reflog → HEAD, 브랜치 이동 이력 추적
├── git log → 커밋 히스토리
├── git cat-file -p <해시> → 객체 내용 확인
└── git fsck → 저장소 무결성 점검
요약
키워드 | 의미 |
---|---|
blob | 파일 내용 |
tree | 폴더 구조 |
commit | 전체 스냅샷 |
HEAD | 현재 위치 추적 포인터 |
refs | 브랜치/태그가 가리키는 대상 |
logs | HEAD/브랜치 이동 기록 (reflog) |
index | 커밋 준비 상태 저장 |
stash | 작업 보관소 (임시 커밋) |