[GitHub 100일 챌린지] Day 26 - Git 3영역 이해하기
[GitHub 100일 챌린지] Day 26 - Git 3영역 이해하기
100일 챌린지 Day 26 - Git의 핵심 구조인 3영역을 배웁니다
배울 내용
- Working Directory, Staging Area, Repository
- 영역 간 이동 과정
- 각 영역의 역할
Topic1. Git 3영역 소개
Git = 3개 영역으로 파일 관리
3영역 구조
1
2
3
4
5
6
7
8
9
10
11
12
13
14
┌─────────────────────┐
│ Working Directory │ ← 작업 공간
│ (작업 디렉토리) │ 실제 파일 수정
└─────────────────────┘
↓ git add
┌─────────────────────┐
│ Staging Area │ ← 커밋 준비
│ (스테이징 영역) │ 커밋할 파일 선택
└─────────────────────┘
↓ git commit
┌─────────────────────┐
│ Repository │ ← 저장소
│ (.git directory) │ 영구 저장
└─────────────────────┘
Working Directory (작업 디렉토리)
정의:
1
2
실제로 파일을 편집하는 공간
눈에 보이는 프로젝트 폴더
예시:
1
2
3
4
my-project/
├── index.html ← 여기서 편집
├── style.css ← 수정 가능
└── script.js ← 추가/삭제 가능
특징:
1
2
3
✅ 자유롭게 수정 가능
✅ Git이 변경사항 추적
✅ 아직 영구 저장 안 됨
Staging Area (스테이징 영역)
정의:
1
2
커밋할 파일을 모아두는 준비 공간
git add로 파일을 옮김
비유:
1
2
3
4
📦 택배 상자
- Working Directory: 물건들
- Staging Area: 상자에 넣기
- Repository: 배송 완료
역할:
1
2
3
✅ 커밋할 파일 선택
✅ 부분 커밋 가능
✅ 커밋 전 검토
Repository (.git 디렉토리)
정의:
1
2
모든 커밋 히스토리가 저장되는 곳
.git 폴더에 저장
특징:
1
2
3
✅ 영구 보존
✅ 히스토리 관리
✅ 버전 추적
해보기: 3영역 확인하기
1
2
3
4
5
6
7
8
9
10
11
# 1. 파일 생성 (Working Directory)
echo "Hello" > file.txt
git status
# 2. 스테이징 (Staging Area)
git add file.txt
git status
# 3. 커밋 (Repository)
git commit -m "Add file"
git status
결과: Git 3영역의 구조를 이해합니다
Topic2. 영역 간 이동 과정
파일이 3영역을 어떻게 이동하는지 배웁니다.
1단계: 파일 수정
1
2
# Working Directory에서 파일 수정
echo "Content" > README.md
상태:
1
2
3
Working Directory: ✏️ 수정됨
Staging Area: 비어있음
Repository: 변화 없음
git status:
1
2
Changes not staged for commit:
modified: README.md
2단계: git add (스테이징)
1
git add README.md
상태:
1
2
3
Working Directory: 깨끗함
Staging Area: ✅ README.md
Repository: 변화 없음
git status:
1
2
Changes to be committed:
modified: README.md
3단계: git commit (저장)
1
git commit -m "Update README"
상태:
1
2
3
Working Directory: 깨끗함
Staging Area: 비어있음
Repository: ✅ 새 커밋 추가
git status:
1
nothing to commit, working tree clean
영역 간 이동 명령어
1
2
3
4
5
6
7
8
9
10
11
Working → Staging:
git add <file>
Staging → Repository:
git commit -m "message"
Staging → Working (취소):
git restore --staged <file>
Working 변경 취소:
git restore <file>
여러 파일 동시 처리
해보기:
1
2
3
4
5
6
7
8
9
10
11
12
13
# 1. 여러 파일 수정
echo "A" > file1.txt
echo "B" > file2.txt
echo "C" > file3.txt
# 2. 선택적 스테이징
git add file1.txt file2.txt
# 3. 커밋
git commit -m "Add file1 and file2"
# 4. file3.txt는 아직 Working Directory에
git status
결과: 필요한 파일만 선택해서 커밋할 수 있습니다
Topic3. 각 영역의 역할
왜 3영역이 필요한지 이해합니다.
Working Directory의 역할
자유로운 실험 공간:
1
2
3
✅ 마음껏 수정
✅ 테스트 가능
✅ 언제든지 되돌리기
예시:
1
2
3
4
5
6
# 여러 파일 수정 중
echo "Test 1" > feature1.js
echo "Test 2" > feature2.js
echo "Fix" > bugfix.js
# 아직 결정 안 함
Staging Area의 역할
논리적 단위로 커밋:
1
2
3
✅ 관련 파일만 묶기
✅ 커밋 전 검토
✅ 단계적 작업
예시 - 기능별 커밋:
1
2
3
4
5
6
7
# 기능 A만 커밋
git add featureA.js
git commit -m "Implement feature A"
# 기능 B는 나중에
git add featureB.js
git commit -m "Implement feature B"
예시 - 부분 스테이징:
1
2
3
# 한 파일의 일부만 스테이징
git add -p file.js
# 변경사항 별로 선택 가능
Repository의 역할
영구 히스토리:
1
2
3
✅ 버전 관리
✅ 협업 기준점
✅ 되돌리기 가능
활용:
1
2
3
4
5
6
7
8
# 이전 버전으로 복구
git checkout <commit-hash>
# 특정 시점 비교
git diff <commit1> <commit2>
# 히스토리 탐색
git log --graph --oneline
3영역이 필요한 이유
시나리오 1: 실험 중:
1
2
3
Working: 실험 코드 여러 개
Staging: 완성된 것만 선택
Repository: 검증된 버전만 저장
시나리오 2: 여러 작업 동시:
1
2
3
4
5
Working: 기능 A, B, 버그픽스 C
Staging: 기능 A만 추가
Commit: 기능 A만 커밋
→ 나머지는 다음 커밋에
시나리오 3: 검토 과정:
1
2
3
4
1. Working: 수정
2. Staging: 커밋할 것 선택
3. git diff --staged: 검토
4. Commit: 확정
상태 확인 명령어
1
2
3
4
5
6
7
8
9
10
11
12
# Working Directory 상태
git status
# Staging Area 내용
git diff --staged
git diff --cached # 같은 명령
# Repository 히스토리
git log
# 전체 차이점
git diff HEAD
해보기: 3영역 실습
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. 파일 3개 생성
echo "1" > a.txt
echo "2" > b.txt
echo "3" > c.txt
# 2. a.txt만 스테이징
git add a.txt
git status
# 3. b.txt도 스테이징
git add b.txt
git status
# 4. 커밋
git commit -m "Add a and b"
# 5. c.txt는 여전히 Working Directory
git status
결과: 3영역을 활용해 작업을 체계적으로 관리할 수 있습니다
정리
완료 체크:
- Git 3영역을 설명할 수 있다
- 영역 간 이동 명령어를 안다
- 각 영역의 역할을 이해했다
3영역 요약:
1
2
3
4
5
📁 Working Directory
↓ git add
📦 Staging Area
↓ git commit
💾 Repository (.git)
핵심 명령어:
1
2
3
4
5
git add # Working → Staging
git commit # Staging → Repository
git status # 상태 확인
git diff # Working vs Staging
git diff --staged # Staging vs Repository
다음: Day 27 - 파일 상태 4가지 →
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
