포스트

[GitHub 100일 챌린지] Day 36 - git status 완벽 가이드

[GitHub 100일 챌린지] Day 36 - git status 완벽 가이드

100일 챌린지 Day 36 - 현재 작업 상태를 정확하게 파악합니다

배울 내용

  1. status 출력 읽기
  2. short/long 형식
  3. status 활용 팁

Topic1. status 출력 읽기

git status = 현재 작업 상태 요약

Git 프로젝트의 현재 상태를 확인하는 가장 기본적인 명령어입니다.

기본 사용법

1
git status

출력 예시:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   README.md
        new file:   feature.js

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   index.html
        deleted:    old.css

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        temp.txt
        .env

출력 구조 이해하기

1. 브랜치 정보:

1
2
On branch main
Your branch is up to date with 'origin/main'.

의미:

  • 현재 브랜치: main
  • Remote와 동기화 상태

2. Staging Area (커밋 예정):

1
2
3
Changes to be committed:
  modified:   README.md
  new file:   feature.js

의미:

  • 다음 커밋에 포함될 파일들
  • git add로 추가한 파일들
  • 초록색으로 표시됨

3. Working Directory (수정됨):

1
2
3
Changes not staged for commit:
  modified:   index.html
  deleted:    old.css

의미:

  • 수정했지만 아직 staging 안 함
  • git add 필요
  • 빨간색으로 표시됨

4. Untracked Files (추적 안 됨):

1
2
3
Untracked files:
  temp.txt
  .env

의미:

  • Git이 아직 관리하지 않는 새 파일
  • .gitignore에 추가 고려
  • 빨간색으로 표시됨

상태별 색상 코드

1
2
3
초록색 = Staged (커밋 준비 완료)
빨간색 = Modified/Untracked (아직 staging 안 됨)
회색 = Ignored (.gitignore에 있음)

해보기: 실제 프로젝트 상태 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 1. 새 파일 만들기
echo "Test" > test.txt

# 2. 기존 파일 수정
echo "Update" >> README.md

# 3. 상태 확인
git status

# 출력:
# Untracked files:
#   test.txt
# Changes not staged for commit:
#   modified: README.md

# 4. test.txt staging
git add test.txt
git status

# 출력:
# Changes to be committed:
#   new file: test.txt
# Changes not staged for commit:
#   modified: README.md

결과: 파일이 어떤 상태인지 명확하게 구분할 수 있습니다


Topic2. short/long 형식

long 형식 = 상세한 설명, short 형식 = 간결한 코드

상황에 따라 적절한 출력 형식을 선택할 수 있습니다.

long 형식 (기본)

1
git status

장점:

1
2
3
4
✅ 자세한 설명 제공
✅ 초보자 친화적
✅ 각 파일의 상태 설명
✅ 다음 단계 안내

단점:

1
2
3
❌ 출력이 길고 장황함
❌ 파일 많을 때 보기 어려움
❌ 스크립트에서 파싱 어려움

short 형식

1
2
3
git status -s
# 또는
git status --short

출력 예시:

1
2
3
4
5
6
M  README.md
A  feature.js
 M index.html
 D old.css
?? temp.txt
?? .env

short 형식 코드 의미

첫 번째 컬럼 (Staging Area):

1
2
3
4
5
M  = Modified (staged)
A  = Added (staged)
D  = Deleted (staged)
R  = Renamed (staged)
C  = Copied (staged)

두 번째 컬럼 (Working Directory):

1
2
 M = Modified (not staged)
 D = Deleted (not staged)

특수 코드:

1
2
?? = Untracked (새 파일)
!! = Ignored (.gitignore)

코드 조합 예시

1
2
3
4
5
6
7
8
9
git status -s

# 출력:
M  README.md      # Staged, 수정됨
 M index.html     # Not staged, 수정됨
MM style.css      # Staged + 추가 수정
A  new.js         # Staged, 새 파일
 D old.css        # Not staged, 삭제됨
?? temp.txt       # Untracked

MM 의미:

1
2
3
4
5
6
M  = Staging Area에 수정본 있음
 M = Working Directory에 추가 수정 있음

즉:
1. git add style.css 했음
2. 그 후 또 수정했음

branch 정보 포함

1
2
3
git status -sb
# 또는
git status --short --branch

출력:

1
2
3
## main...origin/main
M  README.md
?? temp.txt

## main...origin/main 의미:

  • 현재 브랜치: main
  • 추적 브랜치: origin/main
  • 동기화 상태 표시

동기화 상태 코드:

1
2
3
## main...origin/main [ahead 2]     # 2개 커밋 앞섬
## main...origin/main [behind 3]    # 3개 커밋 뒤쳐짐
## main...origin/main [ahead 1, behind 2]  # 1개 앞서고 2개 뒤쳐짐

해보기: long vs short 비교

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. 여러 파일 수정
echo "A" > file1.txt
echo "B" >> README.md
git add file1.txt

# 2. long 형식
git status

# 3. short 형식
git status -s
# M  file1.txt
# ?? README.md

# 4. branch 포함 short
git status -sb
# ## main...origin/main
# M  file1.txt
# ?? README.md

결과: short 형식이 훨씬 간결하고 파싱하기 쉽습니다


Topic3. status 활용 팁

git status = 작업 흐름의 나침반

실전에서 유용한 활용 방법들을 배웁니다.

팁 1: 자주 확인하기

작업 전후로 항상 확인:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 작업 전
git status
# 깨끗한 상태 확인

# 작업 중
# 파일 수정...
git status
# 어떤 파일이 변경됐는지 확인

# 커밋 전
git status
# 의도한 파일만 staging 됐는지 확인

# 커밋 후
git status
# 모든 변경사항이 커밋됐는지 확인

팁 2: 자동화 (Alias 설정)

1
2
3
4
5
6
7
# 짧은 형식 alias
git config --global alias.s 'status -s'
git config --global alias.sb 'status -sb'

# 사용
git s      # git status -s
git sb     # git status -sb

팁 3: 스크립트에서 활용

파일 목록 추출:

1
2
3
4
5
6
7
8
# Modified 파일만
git status -s | grep "^ M" | cut -c4-

# Untracked 파일만
git status -s | grep "^??" | cut -c4-

# Staged 파일만
git status -s | grep "^M " | cut -c4-

조건부 작업:

1
2
3
4
5
6
7
8
# 변경사항 있을 때만 커밋
if [ -n "$(git status -s)" ]; then
  echo "변경사항 있음"
  git add .
  git commit -m "Auto commit"
else
  echo "변경사항 없음"
fi

팁 4: 특정 경로만 확인

1
2
3
4
5
6
7
8
# src/ 디렉토리만
git status src/

# 특정 파일만
git status README.md

# 여러 경로
git status src/ docs/ README.md

팁 5: porcelain 형식 (기계 파싱용)

1
git status --porcelain

특징:

1
2
3
✅ 버전 간 일관된 출력
✅ 스크립트 파싱에 최적화
✅ 사람이 읽기는 어려움

활용 예시:

1
2
3
4
5
6
# CI/CD에서 변경사항 감지
CHANGES=$(git status --porcelain)
if [ -n "$CHANGES" ]; then
  echo "Uncommitted changes detected!"
  exit 1
fi

팁 6: ignored 파일 표시

1
git status --ignored

.gitignore에 있는 파일까지 모두 표시합니다.

출력 예시:

1
2
3
4
5
Ignored files:
  (use "git add -f <file>..." to include in what will be committed)
        node_modules/
        .env
        *.log

팁 7: 상태 확인 체크리스트

커밋 전 체크리스트:

1
2
3
4
5
6
7
8
9
# 1. 상태 확인
git status

# 2. 의도한 파일만 staged?
# 3. 민감한 정보 없음?
# 4. 불필요한 파일 없음?

# 5. 문제 없으면 커밋
git commit -m "..."

push 전 체크리스트:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1. 로컬 상태 확인
git status

# 2. remote와 비교
git status -sb
# [ahead 3] → push 필요
# [behind 2] → pull 필요

# 3. 커밋 안 된 것 없음?
# 4. 테스트 통과?

# 5. push
git push

해보기: 실전 워크플로우

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 1. 작업 시작 전
git status
# nothing to commit, working tree clean

# 2. 파일 수정
vim index.html

# 3. 바로 확인
git s
#  M index.html

# 4. staging
git add index.html

# 5. 다시 확인
git s
# M  index.html

# 6. 커밋
git commit -m "Update homepage"

# 7. 최종 확인
git s
# nothing to commit, working tree clean

# 8. remote 확인
git sb
# ## main...origin/main [ahead 1]
# → push 필요!

결과: git status를 자주 사용하면 실수를 줄일 수 있습니다


정리

완료 체크:

  • status 출력의 각 섹션 의미를 안다
  • long/short 형식을 상황에 맞게 사용할 수 있다
  • status를 작업 흐름에 통합할 수 있다

핵심 명령어:

1
2
3
4
5
6
7
8
9
10
git status                    # 상세한 상태 보기
git status -s                 # 간결한 상태 보기
git status -sb                # branch 정보 포함
git status --porcelain        # 스크립트용 출력
git status --ignored          # ignored 파일 포함
git status <path>             # 특정 경로만

# Alias 설정 (권장)
git config --global alias.s 'status -s'
git config --global alias.sb 'status -sb'

상태 코드 요약:

1
2
3
4
5
6
7
8
9
10
11
12
Long 형식:
  Changes to be committed     → Staged (커밋 준비)
  Changes not staged          → Modified (수정됨)
  Untracked files            → 새 파일

Short 형식:
  M  = Staged Modified
   M = Not Staged Modified
  MM = Both Staged + Modified
  A  = Added
  D  = Deleted
  ?? = Untracked

실전 팁:

1
2
3
4
5
1. 작업 전후로 항상 확인
2. git s/git sb alias 설정
3. 커밋 전 반드시 확인
4. remote 동기화 상태 확인
5. 스크립트는 --porcelain 사용

다음: Day 37 - git log 히스토리 보기


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.