커밋할 변경의 파일 모드와 상태 코드를 한 줄로 확인하기
by 그릿 | GROWTH_ESSAY | 2026-11-10
#practical-guides #Git #개발git diff --cached --rawgit diff HEADgit status --short
커밋 직전에 파일의 실제 변경 내용과 상태를 빠르게 확인하고 싶다면 세 명령의 비교 기준을 나누어 읽으면 됩니다. git diff --cached --raw는 인덱스에 담긴 커밋 예정 변경을 파일 모드와 상태 코드 중심으로 한 줄에 보여줍니다. git diff HEAD는 현재 작업트리와 최신 커밋인 HEAD를 비교해 커밋 기준으로 남아 있는 전체 차이를 보여줍니다. git status --short는 인덱스와 작업트리 각각의 상태를 짧은 코드로 표시하고, 아직 추적하지 않은 파일도 확인하게 해줍니다.
왜 이렇게 보이나요
파일을 수정한 직후 git diff를 실행하면 작업트리와 인덱스 사이의 차이가 표시됩니다. 이 차이는 아직 다음 커밋을 위해 인덱스에 담기지 않은 변경입니다. git add note.txt를 실행하면 변경 내용이 인덱스로 이동하므로 작업트리와 인덱스가 같아지고, 이어서 실행한 일반 git diff는 출력이 비어 있습니다.
이 상태에서 커밋할 내용을 확인하는 기준은 인덱스와 HEAD입니다. 따라서 git diff --cached 또는 같은 뜻의 git diff --staged가 인덱스에 담긴 변경을 보여줍니다. git diff HEAD는 HEAD와 현재 작업트리를 비교하므로, 인덱스에 담긴 변경과 아직 작업트리에만 남은 변경을 함께 살펴보는 용도입니다.
파일을 git add한 뒤 다시 수정하면 두 비교 결과가 다시 갈라집니다. 먼저 인덱스에 담긴 버전과 HEAD 사이의 차이는 git diff --cached에서 확인하고, 다시 수정한 작업트리와 인덱스 사이의 차이는 일반 git diff에서 확인합니다. git diff --cached가 비어 있어도 추적되지 않은 파일까지 자동으로 없다고 판단할 수는 없으므로 git status --short를 함께 확인하세요.
어떤 명령으로 확인하나요
파일 이름과 상태 코드만 필요한 경우에는 다음처럼 실행합니다.
git diff --cached --raw
검증된 예제에서는 다음과 같은 한 줄이 출력됩니다.
:100644 100644 90be1f3 294186e M note.txt
앞의 100644 두 값은 비교 대상 파일의 모드입니다. 일반 파일 모드가 양쪽에 같은지, 실행 권한 같은 모드 변화가 있는지 한 줄에서 살필 수 있습니다. 이어지는 두 값은 이전 버전과 현재 버전의 객체를 가리키는 축약 식별자이며, 마지막의 M은 파일이 수정되었다는 상태 코드입니다. 탭 뒤의 note.txt가 변경 파일 이름입니다.
커밋될 실제 내용까지 보려면 git diff --cached를 실행합니다. 작업트리 전체를 최신 커밋과 비교하려면 git diff HEAD를 실행합니다. 두 명령은 비슷한 변경 내용을 보여줄 수 있지만 비교 기준과 확인 목적이 다릅니다.
적용 조건과 다음 확인
명령은 Git 저장소 안에서, 변경을 만든 뒤 실행하세요. 커밋 전에 먼저 git status --short로 두 칸의 상태를 읽으면 인덱스와 작업트리의 위치를 구분하기 쉽습니다. 예제의 M 에서 첫째 칸의 M은 인덱스에 수정 사항이 있다는 뜻이고, 둘째 칸은 작업트리에 추가 수정이 있는지 나타내는 자리입니다. M처럼 둘째 칸에 M이 있으면 작업트리에만 남은 수정이 있다는 의미입니다. ??가 보이면 아직 추적되지 않은 파일이므로 커밋 대상에 포함할지 결정한 뒤 다시 상태를 확인하세요.
마지막으로 git diff --cached --raw에서 파일 모드와 상태 코드를 확인하고, git diff --cached에서 실제 커밋 내용을 검토하면 됩니다. 작업 중인 전체 차이가 궁금할 때는 별도로 git diff HEAD를 실행해 HEAD부터 현재 작업트리까지의 상태를 확인하세요.
새 폴더에서 직접 확인하기
새 예제 폴더에서 실행하세요. 기존 프로젝트에서 초기화 명령을 실행하지 않습니다.
mkdir git-diff-example
cd git-diff-example
git init -q
printf 'before\n' > note.txt
git add note.txt
git -c user.name=Example -c user.email=example@example.invalid -c commit.gpgsign=false commit -qm initial
printf 'after\n' > note.txt
git diff
git add note.txt
git diff
git diff --cached
git diff HEAD
git status --short
git diff --cached --raw실제로 확인한 출력
git diff
diff --git a/note.txt b/note.txt
index 90be1f3..294186e 100644
--- a/note.txt
+++ b/note.txt
@@ -1 +1 @@
-before
+after
git diff
(출력 없음)git diff --cached
diff --git a/note.txt b/note.txt
index 90be1f3..294186e 100644
--- a/note.txt
+++ b/note.txt
@@ -1 +1 @@
-before
+after
git diff HEAD
diff --git a/note.txt b/note.txt
index 90be1f3..294186e 100644
--- a/note.txt
+++ b/note.txt
@@ -1 +1 @@
-before
+after
git status --short
M note.txt
git diff --cached --raw
:100644 100644 90be1f3 294186e M note.txt
예제 확인: git version 2.50.1 (Apple Git-155), 2026-11-10
Git 공식 문서에서 명령의 비교 범위를 확인할 수 있어요.