✅ 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]
워킹 디렉토리 변경 사항 확인 스테이징 영역에 올림 로컬 저장소에 커밋 커밋 히스토리 확인
(Working Tree) (Staging Area) (Local Repository)
📚 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 정책도 함께 이해해야 함
댓글