포스트

[GitHub 100일 챌린지] Day 26 - Git 3영역 이해하기

[GitHub 100일 챌린지] Day 26 - Git 3영역 이해하기

100일 챌린지 Day 26 - Git의 핵심 구조인 3영역을 배웁니다

배울 내용

  1. Working Directory, Staging Area, Repository
  2. 영역 간 이동 과정
  3. 각 영역의 역할

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 라이센스를 따릅니다.