본문 바로가기
git

[Git] Git의 전체 작동 흐름과 주요 명령어 설명

by clolee 2025. 4. 10.

✅ Git의 전체 작동 흐름과 주요 명령어 설명


🎯 Git의 핵심 개념 먼저 정리

Git은 버전 관리 시스템으로서, 다음 3개의 영역에서 모든 작업이 일어납니다:

📂 Git의 3가지 작업 영역 (Working Tree → Staging Area → Repository)

영역 설명 관련 명령어
Working Directory (또는 Working Tree) 실제 작업 중인 파일들이 있는 디렉토리 git status, git diff, 파일 수정
Staging Area (Index) Git에 반영할 변경사항을 올려놓는 중간 준비 공간 git add
Repository (.git 디렉토리) 커밋된 모든 히스토리가 저장된 로컬 데이터베이스 git commit, git log, git reset

💡 Git은 로컬에서 위 3단계를 거쳐 버전을 기록하고, 이후 원격(remote) 저장소로 push/pull로 공유합니다.


🧭 Git 실무 흐름 전체 단계

작업 → 변경 확인 → Staging → Commit → 브랜치 관리 → 원격 저장소 동기화

각 단계마다 어떤 명령어가 어떤 의미로 작동하는지를 깊이 있게 설명드릴게요.


🔧 1. 파일 수정 및 추가 (Working Tree 작업)

✔ 실질적인 소스코드 작성, 수정, 삭제 등은 모두 이 단계에서 이뤄짐

  • 변경 감지는 Git이 .git 디렉토리 내에서 파일의 SHA-1 해시값을 비교해 감지함
  • 아직 Git은 이 변경사항을 추적만 할 뿐, 관리 대상으로 "선택"하진 않음

관련 명령어:

git status          # 변경된 파일 확인
git diff            # 변경된 내용 확인

📥 2. Staging Area에 올리기 (git add)

✔ "이 변경사항을 버전으로 남기겠다"고 Git에게 알려주는 명령어

git add 파일명         # 특정 파일만 올림
git add .              # 현재 디렉토리 하위 전체 파일 올림
  • 내부적으로는 Git이 index라는 staging 영역에 해당 파일의 해시 및 트리 구조를 저장함
  • 변경사항이 아직 영구 저장(commit)은 안 됐음

📌 3. 커밋하기 (git commit)

✔ 스테이징된 변경사항을 Git의 로컬 저장소에 스냅샷(정확히는 트리 객체)으로 기록

git commit -m "설명 메시지"

내부 작동 원리

  • Git은 스테이징된 파일들을 Blob 객체로 저장하고,
  • 해당 디렉토리 구조를 Tree 객체로 구성하고,
  • 이전 커밋을 참조하는 Commit 객체를 생성
  • 그 후 HEAD가 새 커밋을 가리키도록 이동
Blob (파일 내용) → Tree (폴더 구조) → Commit (히스토리) → HEAD 업데이트

🌿 4. 브랜치 작업 및 변경 내용 이동 (git checkout, git switch, git restore)

✔ Git은 커밋된 시점마다 "스냅샷"을 저장함
✔ 특정 커밋이나 브랜치로 이동하거나, 파일만 특정 시점으로 되돌릴 수 있음

주요 명령어와 목적

명령어 목적 설명
git checkout 브랜치명 브랜치 전환 워킹 트리와 HEAD를 해당 브랜치로 이동
git checkout 커밋해시 -- 파일명 파일 복원 해당 커밋 시점의 파일을 현재로 가져옴
git switch 브랜치 전용 Git 2.23 이후 권장
git restore 파일 복구 전용 Git 2.23 이후 권장

🔀 5. 기록 되돌리기 (Reset, Revert, Restore)

✔ 실수로 커밋하거나, 작업을 잘못했을 때 Git은 복구 도구를 다양하게 제공함

명령어 영향 범위 설명
git reset HEAD, index, working 모두 영향 로컬 히스토리를 이동시켜 과거 상태로 돌아감
git revert 새로운 커밋 생성 기존 커밋을 무효화하는 새 커밋 생성 (히스토리 보존)
git restore 워킹 디렉토리 특정 파일을 커밋 상태로 복원 (git checkout 대체)

📤 6. 원격 저장소와 동기화 (git push, git pull, git fetch)

✔ 로컬에서 작업한 내용을 공유하거나, 다른 사람의 변경사항을 반영하려면 원격 저장소와 연결 필요

주요 명령어 설명

명령어 설명
git push origin 브랜치명 로컬 브랜치 커밋을 원격 저장소로 업로드
git pull origin 브랜치명 원격 브랜치의 커밋을 가져와 병합 (fetch + merge)
git fetch 원격 저장소의 최신 정보만 가져옴 (병합은 하지 않음)

⚠️ 실무에서는 git pull --rebase를 선호하는 경우도 많음 (깔끔한 커밋 히스토리 유지)


📊 전체 Git 흐름 요약 도표

[수정] → [git status] → [git add] → [git commit] → [git log]
    ↓           ↓               ↓               ↓
 워킹트리    스테이징     로컬저장소      커밋 히스토리 관리

📚 Git 전체 핵심 명령어 요약 (기능별 정리)

분류 명령어 역할 요약
변경 확인 status, diff 현재 작업 상태 보기
스테이징 add, reset 버전으로 기록할 것 선택
기록 commit, log 변경 히스토리 저장 및 열람
브랜치 branch, checkout, switch 기능 개발 분기 및 이동
병합 merge, rebase 다른 브랜치 변경사항 통합
되돌리기 reset, revert, restore 실수 복구, 되돌리기
원격 clone, push, pull, fetch 공유, 동기화, 협업
히스토리 분석 log, reflog, show, blame 커밋 내용 추적

✅ 마무리 요약

  • Git은 작업 디렉토리 → 스테이징 → 로컬 저장소 → 원격 저장소로 흐름이 연결됨
  • 각각의 명령어는 이 단계에서 정확한 역할을 수행
  • commit, checkout은 이 흐름의 중추 역할을 하며, 내부적으로는 blob, tree, commit, HEAD, index라는 Git 객체와 포인터 구조로 작동함
  • 실무에서는 브랜치 전략(Git Flow), 커밋 메시지 컨벤션, push/pull 정책도 함께 이해해야 함

댓글