Git 핵심 개념 레퍼런스

Git 4대 오브젝트

Git의 모든 동작은 단 4종류의 오브젝트 생성과 연결로 이루어진다.

오브젝트역할
Blob파일 내용 저장. 파일명·경로 없이 내용만. SHA-1 해시로 식별
Tree디렉토리 구조. 파일명·권한·blob 포인터를 담는다
Commit특정 시점 스냅샷. tree 포인터 + 부모 커밋 + 메타데이터
Tag특정 커밋에 붙이는 고정 라벨 (v1.0.0 등)

Git의 작업 영역

Working Directory → (git add) → Staging Area → (git commit) → Repository
영역설명
Working Directory실제 파일이 있는 공간 (.git 제외)
Staging Area (Index)git add한 변경 사항 대기열
Repository (.git)커밋된 스냅샷 저장소

파일 상태

  • Untracked: git add 한 번도 안 한 신규 파일
  • Staged: 스테이징 영역에 올라온 상태
  • Unmodified: 최신 커밋과 동일한 상태
  • Modified: 최신 커밋 이후 변경된 상태

HEAD와 브랜치의 관계

HEAD는 현재 작업 위치를 가리키는 포인터다.

HEAD → main → commit_abc

브랜치 전환 시:

git checkout feature
HEAD → feature → commit_xyz

브랜치를 새로 만들고 커밋하면 흐름이 갈라진다:

main    → A → B → C
feature → A → B → D → E

git merge feature를 실행하면 두 흐름을 합친 merge commit이 생성된다.

Detached HEAD

HEAD가 브랜치가 아닌 특정 커밋을 직접 가리키는 상태다.

git switch [커밋해시] --detach

이 상태에서 커밋하면 어느 브랜치에도 속하지 않는 orphan commit이 생긴다. 해당 커밋을 보존하려면 새 브랜치를 만들어야 한다:

git branch -f main HEAD    # main을 현재 HEAD로 이동
git checkout main          # 또는 새 브랜치 생성

자주 쓰는 명령어

git log --oneline --graph    # 히스토리 그래프로 보기
git diff HEAD                # 마지막 커밋 이후 변경사항
git stash                    # 작업 임시 저장
git stash pop                # 임시 저장 복원
git cherry-pick [해시]       # 특정 커밋만 가져오기
git rebase -i HEAD~3         # 최근 3개 커밋 편집
git reset --soft HEAD~1      # 커밋 취소 (변경사항 유지)
git reset --hard HEAD~1      # 커밋 취소 (변경사항 삭제)