✅ 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 정책도 함께 이해해야 함
'git' 카테고리의 다른 글
[Git] GitHub HTTPS 인증 실패: "Support for password authentication was removed" 에러 해결 가이드 (0) | 2025.04.16 |
---|---|
[Git] Git에서 강제로 Pull 하기 (`로컬 변경사항 무시하고 원격 상태로 덮어쓰기`) (0) | 2025.04.10 |
[Git] Git 2.25 이상: `git sparse-checkout set`을 이용한 특정 폴더 클론 방법 (0) | 2025.04.10 |
[Git] Git 저장소에서 특정 하위 폴더만 클론하는 방법 (여러 폴더 선택 포함) (0) | 2025.04.10 |
[Git] Git에서 일부 폴더만 작업 후 push 했을 때 생기는 문제와 안전한 대처법 (0) | 2025.04.10 |
댓글