커밋할 패치와 파일별 변경량을 한 화면에서 대조하기
by 그릿 | GROWTH_ESSAY | 2026-11-13
#practical-guides #Git #개발git diff --cached
git diff HEAD
git status --short파일을 수정한 뒤 git add를 실행하면 변경 내용이 다음 커밋을 위한 인덱스에 담깁니다. 이때 git diff는 작업트리와 인덱스를 비교하므로 비어 있을 수 있습니다. 커밋할 패치와 파일별 변경량을 한 화면에서 대조하려면 다음 명령을 사용합니다.
git diff --cached --patch-with-stat이 명령은 파일별 변경량 요약과 실제 패치를 이어서 보여 줍니다. 예제에서는 note.txt | 2 +-처럼 파일별 요약이 먼저 나오고, 이어서 before가 after로 바뀐 패치가 표시됩니다. 한 파일의 추가·삭제 줄 수와 실제 수정 내용을 같은 흐름에서 확인할 수 있어 커밋 직전 검토에 알맞습니다.
왜 이렇게 보이나요
git diff는 작업트리와 인덱스의 차이를 보여 줍니다. 파일을 고친 직후에는 수정 내용이 작업트리에 있으므로 이 명령에서 패치가 나타납니다. git add note.txt를 실행하면 그 변경이 인덱스로 이동하고 작업트리와 인덱스가 같아져 git diff가 비어 있습니다.
커밋할 변경을 확인하는 기준은 인덱스와 HEAD의 비교인 git diff --cached입니다. --cached는 다음 커밋에 들어갈 스테이징 변경을 보여 주며, 인자를 생략하면 최신 커밋인 HEAD를 기준으로 삼습니다. 파일별 통계까지 필요하면 여기에 --patch-with-stat을 붙입니다.
git diff HEAD는 작업트리 전체와 최신 커밋을 비교합니다. 따라서 인덱스에 담긴 변경과 아직 추가하지 않은 작업트리 변경을 함께 살펴볼 때 사용합니다. 커밋할 내용만 검토할 때의 --cached와 비교 범위가 다릅니다.
어떤 명령으로 확인하나요
세 명령을 목적에 맞춰 나누면 상태를 빠르게 읽을 수 있습니다.
git diff --cached: 인덱스와HEAD사이의 커밋 예정 패치git diff HEAD: 작업트리 전체와HEAD사이의 패치git status --short: 파일의 인덱스 상태와 작업트리 상태를 짧게 확인
git diff --cached --patch-with-stat은 첫 부분에 파일별 변경량을 표시하고 뒤에 일반 패치를 붙입니다. 파일 수, 추가 줄 수, 삭제 줄 수를 먼저 훑은 다음 실제 문맥으로 내려갈 수 있습니다. 여러 파일을 커밋하기 전 변경 규모와 내용이 서로 맞는지 한 번에 대조할 때 유용합니다.
상태 코드와 추가 수정 읽기
git status --short의 상태 코드는 두 칸으로 읽습니다. 첫째 칸은 인덱스 상태이고, 둘째 칸은 작업트리 상태입니다. 예제의 M note.txt에서 첫째 칸의 M은 수정된 파일이 인덱스에 담겼다는 뜻이며, 둘째 칸이 비어 있어 작업트리에 추가 수정이 없음을 나타냅니다.
인덱스에 담은 뒤 파일을 다시 수정하면 작업트리와 인덱스가 달라집니다. 그러면 git diff에 추가 수정이 다시 나타나고, git diff --cached에는 먼저 추가한 변경이 남습니다. 이 상태에서 git diff HEAD를 실행하면 커밋 예정 변경과 아직 인덱스에 담기지 않은 수정까지 최신 커밋과 비교해 확인할 수 있습니다.
따라서 커밋 직전에는 git diff --cached --patch-with-stat로 실제 커밋 패치와 파일별 수치를 보고, git status --short로 둘째 칸에 남은 작업트리 변경과 추적되지 않은 파일을 함께 확인하세요. 인덱스 비교가 비어 있어도 상태 전체가 깨끗하다고 단정하지 말고 상태 명령으로 범위를 보완하면 됩니다.
새 폴더에서 직접 확인하기
새 예제 폴더에서 실행하세요. 기존 프로젝트에서 초기화 명령을 실행하지 않습니다.
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 --patch-with-stat실제로 확인한 출력
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 --patch-with-stat
note.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/note.txt b/note.txt
index 90be1f3..294186e 100644
--- a/note.txt
+++ b/note.txt
@@ -1 +1 @@
-before
+after
예제 확인: git version 2.50.1 (Apple Git-155), 2026-11-13
Git 공식 문서에서 명령의 비교 범위를 확인할 수 있어요.