git status로 작업 디렉토리 상태 확인하기

git status로 작업 디렉토리 상태 확인하기

Git으로 작업하다 보면 “지금 어떤 파일을 수정했더라?”, “스테이징에 뭘 올려놨지?” 같은 순간이 자주 옵니다. git status는 바로 이런 질문에 답해주는 명령어인데요. 현재 작업 디렉토리와 스테이징 영역의 상태를 한눈에 보여줘서, 다음에 뭘 해야 할지 파악하는 데 큰 도움이 됩니다.

기본 사용법

사용법은 정말 간단합니다. 그냥 git status를 입력하면 됩니다.

$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   src/auth/login.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:   src/components/Header.jsx

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        src/utils/format.js

이 출력을 세 구역으로 나눠서 살펴보겠습니다.

출력 내용 읽기

Changes to be committed 구역은 git add로 스테이징 영역에 올라간 파일들입니다. 여기에 있는 변경 내용은 다음 git commit을 실행하면 커밋에 포함됩니다.

Changes not staged for commit 구역은 Git이 이미 추적하고 있는 파일인데 수정은 했지만 아직 스테이징에 올리지 않은 파일들입니다. 이 파일들은 git add를 해야 다음 커밋에 포함시킬 수 있습니다.

Untracked files 구역은 Git이 아직 한 번도 관리한 적 없는 새 파일들입니다. 처음 만든 파일이 여기에 표시되는데, git add로 추적을 시작하면 이 구역에서 사라집니다.

각 구역 아래에 Git이 친절하게 다음에 할 수 있는 동작을 안내해주는 것도 눈에 띕니다. git restore로 변경을 되돌리거나, git add로 스테이징에 올리라는 힌트가 바로 그것이에요.

깨끗한 상태

모든 변경 내용을 커밋한 뒤에 git status를 실행하면 이런 메시지가 나옵니다.

$ git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

working tree clean이라는 말은 작업 디렉토리에 커밋할 변경 내용이 없다는 뜻입니다. 깔끔하게 정리된 상태에서 새로운 작업을 시작하기에 딱 좋은 시점이죠.

브랜치 정보

git status 출력의 첫 줄에는 현재 브랜치 이름이 표시됩니다.

On branch feature/user-profile
Your branch is ahead of 'origin/feature/user-profile' by 2 commits.
  (use "git push" to publish your local commits)

원격 브랜치와의 관계도 알려주는데요.

ahead of ... by N commits는 로컬에 원격에 아직 올리지 않은 커밋이 N개 있다는 뜻이고, behind ... by N commits는 원격에 아직 내려받지 않은 커밋이 N개 있다는 뜻입니다. 둘 다 표시되면 양쪽 모두 서로 다른 커밋이 있어서 git pull이나 git merge가 필요한 상황입니다.

간략한 출력

git status의 기본 출력은 친절하지만 좀 길다고 느껴질 수 있습니다. -s 옵션(또는 --short)을 붙이면 훨씬 간결한 형태로 볼 수 있습니다.

$ git status -s
M  src/auth/login.js
 M src/components/Header.jsx
?? src/utils/format.js

각 줄 앞의 두 글자가 해당 파일의 상태를 나타내는데요.

첫 번째 칸은 스테이징 영역의 상태, 두 번째 칸은 작업 디렉토리의 상태를 의미합니다. M은 수정(Modified), A는 추가(Added), D는 삭제(Deleted), R은 이름 변경(Renamed), ??는 추적되지 않는 새 파일(Untracked)입니다.

위 예시를 풀어보면 login.js는 스테이징 완료, Header.jsx는 수정했지만 아직 스테이징 안 함, format.js는 새 파일이라는 의미입니다.

스크립트나 별칭(alias)에서 git status를 쓸 때는 -s 옵션이 특히 유용합니다.

무시된 파일도 보기

.gitignore에 등록한 파일은 기본적으로 git status에 표시되지 않는데요. 무시된 파일까지 보고 싶다면 --ignored 옵션을 사용합니다.

$ git status --ignored
Ignored files:
  (use "git add -f <file>..." to include in what will be committed)
        .env
        node_modules/
        dist/

.gitignore 설정이 제대로 동작하는지 확인할 때 유용합니다.

활용 팁

git status는 다른 명령어를 실행하기 전에 습관적으로 쳐보는 게 좋습니다.

커밋하기 전에는 의도한 파일만 스테이징되었는지 확인하고, git pull하기 전에는 로컬 변경 내용이 있는지 미리 체크하는 식입니다. 브랜치를 전환하기 전에도 커밋하지 않은 변경 내용이 있는지 확인해두면 의도치 않게 다른 브랜치로 변경 내용이 넘어가는 상황을 방지할 수 있습니다.

자주 치는 명령어인만큼 git config에 짧은 별칭을 등록해두면 편합니다.

$ git config --global alias.st status

이렇게 설정하면 git st만 쳐도 git status가 실행됩니다.

마치며

git status는 Git의 현재 상태를 파악하는 가장 기본적인 명령어입니다. 한 줄의 명령어로 스테이징 상태, 수정된 파일, 브랜치 정보까지 한눈에 확인할 수 있으니 작업 중간중간에 자주 사용하는 습관을 들이는 게 좋겠습니다.

더 자세한 내용은 Git 공식 문서를 참고하세요.

This work is licensed under CC BY 4.0 CC BY

Discord