Skip to main content

마인드맵


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

작업 보관소 (임시 커밋)