[GitHub 100일 챌린지] Day 27 - 파일 상태 4가지 이해하기
100일 챌린지 Day 27 - Git에서 파일이 가질 수 있는 4가지 상태를 배웁니다
배울 내용
- Untracked, Unmodified, Modified, Staged
- 상태 간 전환 과정
- git status로 상태 확인
Topic1. 파일 상태 4가지
Git 파일은 4가지 상태 중 하나입니다.
이 상태는 “파일이 어디까지 Git에 알려졌는가”를 보여줍니다. 초보자가 Git에서 길을 잃는 가장 큰 이유는 수정한 파일, 스테이징한 파일, 커밋된 파일을 한 덩어리로 생각하기 때문입니다.
먼저 아래 기준으로 나눠보세요.
| 질문 | 상태 |
|---|---|
| Git이 아직 모르는 새 파일인가? | Untracked |
| 마지막 커밋과 같은가? | Unmodified |
| 수정했지만 커밋 후보는 아닌가? | Modified |
| 다음 커밋에 들어갈 준비가 됐는가? | Staged |
1. Untracked (추적 안 됨)
정의: Git이 아직 모르는 새 파일
1
2
3
# 새 파일 생성
echo "New" > new-file.txt
git status
출력:
1
2
Untracked files:
new-file.txt
특징:
1
2
3
🔴 Git이 추적하지 않음
🔴 커밋 불가
🔴 git add 필요
2. Unmodified (수정 안 됨)
정의: 커밋된 후 변경 없는 파일
1
2
git commit -m "Add file"
git status
출력:
1
nothing to commit, working tree clean
특징:
1
2
3
✅ 최신 커밋과 동일
✅ 안정 상태
✅ git status에 안 보임
3. Modified (수정됨)
정의: 커밋 이후 수정된 파일
1
2
3
# 파일 수정
echo "Modified" >> file.txt
git status
출력:
1
2
Changes not staged for commit:
modified: file.txt
특징:
1
2
3
🟡 Working Directory에만 변경
🟡 아직 스테이징 안 됨
🟡 git add 필요
4. Staged (스테이징됨)
정의: 커밋 준비 완료
1
2
git add file.txt
git status
출력:
1
2
Changes to be committed:
modified: file.txt
특징:
1
2
3
🟢 커밋 준비 완료
🟢 다음 커밋에 포함
🟢 git commit 가능
결과: 파일의 4가지 상태를 이해합니다
파일 하나가 동시에 두 영역에서 다르게 보일 수도 있습니다. 예를 들어 파일을 수정해서 git add 한 뒤, 같은 파일을 다시 수정하면 “staged 변경”과 “not staged 변경”이 동시에 존재합니다. 이때 git status --short에서는 MM처럼 보입니다.
Topic2. 상태 간 전환
파일 상태가 어떻게 변하는지 배웁니다.
상태 다이어그램
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
┌─────────────┐
│ Untracked │ 새 파일
└─────────────┘
│ git add
↓
┌─────────────┐
│ Staged │ 커밋 준비
└─────────────┘
│ git commit
↓
┌─────────────┐
│ Unmodified │ 안정 상태
└─────────────┘
│ 파일 수정
↓
┌─────────────┐
│ Modified │ 수정됨
└─────────────┘
│ git add
↓
┌─────────────┐
│ Staged │ 커밋 준비
└─────────────┘
전체 라이프사이클
해보기:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. Untracked
echo "Hello" > demo.txt
git status # Untracked
# 2. Staged
git add demo.txt
git status # Staged
# 3. Unmodified (커밋 후)
git commit -m "Add demo"
git status # Clean (Unmodified)
# 4. Modified
echo "World" >> demo.txt
git status # Modified
# 5. Staged
git add demo.txt
git status # Staged
# 6. Unmodified (커밋 후)
git commit -m "Update demo"
git status # Clean
상태 되돌리기
Staged → Modified:
1
git restore --staged file.txt
Modified → Unmodified:
1
git restore file.txt # ⚠️ 변경사항 사라짐!
Untracked 제거:
1
2
rm file.txt # 또는
git clean -f
되돌리는 명령은 조심해서 사용하세요. 특히 git restore file.txt와 git clean -f는 커밋하지 않은 작업을 버릴 수 있습니다. 실행 전에는 먼저 내용을 확인합니다.
1
2
git diff file.txt
git status --short
결과: 파일 상태를 자유롭게 전환할 수 있습니다
Topic3. git status로 상태 확인
git status를 제대로 읽는 방법입니다.
git status 출력 이해
해보기:
1
2
3
4
5
6
# 다양한 상태 만들기
echo "New" > new.txt # Untracked
echo "Change" >> existing.txt # Modified
git add existing.txt # Staged
git status
출력:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: existing.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes)
modified: another.txt
Untracked files:
(use "git add <file>..." to include)
new.txt
섹션별 의미
Changes to be committed (Staged):
1
2
🟢 다음 커밋에 포함될 파일
→ git commit 가능
Changes not staged (Modified):
1
2
🟡 수정되었지만 스테이징 안 됨
→ git add 필요
Untracked files:
1
2
🔴 Git이 모르는 새 파일
→ git add 필요
단축 출력
간단히 보기:
1
2
3
git status -s
# 또는
git status --short
출력 예시:
1
2
3
4
5
A new-file.txt # Added (Staged)
M modified.txt # Modified (Staged)
M another.txt # Modified (Not staged)
MM both.txt # Modified (Both)
?? untracked.txt # Untracked
짧은 출력은 앞의 두 칸이 중요합니다.
1
XY file
- X: Staging Area 상태
- Y: Working Directory 상태
예를 들어 M file.txt는 stage에 수정이 올라간 상태이고, ` M file.txt는 아직 stage에 올리지 않은 수정입니다. MM file.txt`는 stage에 올라간 수정도 있고, 그 뒤에 다시 작업 폴더에서 수정한 내용도 있다는 뜻입니다.
기호 의미:
1
2
3
4
5
6
?? Untracked
A Added (Staged)
M Modified
MM Modified (Staged + Working)
D Deleted
R Renamed
해보기: 종합 실습
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1. 여러 상태 만들기
echo "A" > staged.txt
git add staged.txt
echo "B" > modified.txt
git add modified.txt
git commit -m "Add files"
echo "Changed" >> modified.txt
echo "C" > untracked.txt
# 2. 상태 확인
git status
git status -s
# 3. 각 파일 상태 파악
결과: git status 출력을 정확히 이해하고 파일 상태를 파악할 수 있습니다
커밋 전 상태 점검법
커밋 전에는 아래 순서를 추천합니다.
1
2
3
git status --short
git diff
git diff --staged
각 명령의 역할은 다릅니다.
| 명령 | 보여주는 것 |
|---|---|
git status --short | 파일별 상태 요약 |
git diff | 아직 stage에 올리지 않은 변경 |
git diff --staged | 다음 커밋에 들어갈 변경 |
이 세 가지를 구분하면 “분명 수정했는데 커밋에 안 들어갔다” 또는 “넣을 생각 없던 파일이 커밋됐다” 같은 실수를 줄일 수 있습니다.
정리
완료 체크:
- 파일 상태 4가지를 설명할 수 있다
- 상태 간 전환 과정을 이해했다
- git status를 읽을 수 있다
git status --short의 X/Y 두 칸을 구분할 수 있다- 커밋 전
git diff와git diff --staged를 확인할 수 있다
4가지 상태:
1
2
3
4
🔴 Untracked: 새 파일
✅ Unmodified: 변경 없음
🟡 Modified: 수정됨
🟢 Staged: 커밋 준비
상태 전환:
1
2
3
4
Untracked → git add → Staged
Staged → git commit → Unmodified
Unmodified → 수정 → Modified
Modified → git add → Staged
