본문 바로가기
C.W.K.
Stream
Lesson 02 of 05 · published

git status: 움직이기 전에 상태부터 읽어

~14 min · status, inspection

Level 0추적 전 새싹
0 XP0/47 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

git status는 가장 먼저 읽는 dashboard야

제대로 된 작업 흐름에서 가장 자주 입력하는 Git 명령은 git status야. stage하기 전, 편집한 뒤, 어디까지 했는지 잊었을 때, 뭔가 이상할 때마다 써. 세 영역의 상태를 한눈에 알려주거든. 무엇이 staged인지, 무엇이 수정됐지만 아직 stage되지 않았는지, 무엇이 untracked인지, 어느 branch에 있는지, remote보다 얼마나 앞서거나 뒤졌는지가 보여.

기본 git status 출력은 친절하고 자세해서 배울 때 좋아. 짧은 형식인 git status -s는 파일마다 두 칸의 상태 문자를 보여줘. 왼쪽은 index, 오른쪽은 작업 트리 상태야. M_은 수정 내용을 stage했고 그 뒤 추가 변경이 없다는 뜻이고, _M은 수정했지만 stage하지 않았다는 뜻이야. MM은 stage한 뒤 또 수정해서 지금 commit하면 예전 version이 들어간다는 경고지. A_는 stage한 새 파일, ??는 untracked file이야. 이 문자에 익숙해지면 긴 문단을 읽지 않아도 상태가 한눈에 들어와.

날마다 쓸 때 유용한 flag도 있어. --branch 또는 -b는 현재 branch와 upstream의 관계를 보여주고, --ahead-behind는 기본으로 켜져 있어. 팀 작업에서는 "Your branch is ahead of 'origin/main' by 2 commits" 같은 문장을 자주 보게 될 거야. push할 commit이 있다는 신호지. git status --short --branch를 한 묶음으로 손에 익혀둬.

숨은 함정도 있어. git status는 다른 branch에만 있는 commit을 말해주지 않아. feature branch에 commit하지 않은 작업이 있다고 착각한 채 main으로 와서 status를 보면 깨끗해 보일 수 있지. 작업이 사라진 게 아니라 다른 branch에 있지만 이 dashboard는 경고하지 않아. 여러 branch를 함께 보려면 git branch -vv를 써.

Code

Daily loop의 status 습관·bash
git status -sb
# 출력 범례:
#   ## main...origin/main [ahead 1]   <- branch + upstream 관계
#    M src/app.js                     <- modified, stage 안 됨
#   M  src/style.css                  <- staged modification
#   MM src/index.html                 <- staged 됐고 또 modified (위험)
#   A  src/new.js                     <- staged new file
#   ?? notes.txt                      <- untracked
다른 branch에 있는 작업 찾기·bash
# upstream + ahead/behind + 마지막 commit 요약 포함 branch list:
git branch -vv

# 예시 출력:
#   feature/login   abc1234 [origin/feature/login: ahead 3] Add OAuth flow
# * main            def5678 [origin/main]                   Merge feature/x

External links

Exercise

작업 중인 프로젝트를 열고 변경 세 개를 만들어. 하나는 stage하고, 하나는 stage한 뒤 다시 수정하고, 마지막 하나는 stage하지 마. git status -sb를 실행해 각 파일의 두 글자 코드를 읽어. 문서를 보기 전에 M, 빈칸, ?가 각각 무엇을 뜻하는지 추측한 뒤 git diffgit diff --staged로 확인해. 예상과 달랐던 조합 하나를 적어봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.