커밋할 변경에서 실제 수정된 줄만 문맥 없이 확인하기
by 그릿 | GROWTH_ESSAY | 2026-11-06
#practical-guides #Git #개발git diff --cached
git diff HEAD
git status --shortGit에서 같은 파일을 두고도 어떤 비교 지점을 선택했는지에 따라 diff의 의미가 달라집니다. 커밋할 변경을 확인하는 명령은 git diff --cached입니다. 인덱스에 담긴 내용을 현재 커밋인 HEAD와 비교하므로, 다음 커밋에 들어갈 수정 줄을 확인할 수 있습니다. 작업트리와 인덱스 사이에 남아 있는 수정은 git diff가 보여 줍니다.
왜 이렇게 보이나요
git add note.txt를 실행하면 파일의 현재 내용이 인덱스에 담깁니다. 이때 일반 git diff는 작업트리와 인덱스를 비교합니다. 작업트리에 추가 수정이 없으면 두 내용이 같으므로 출력이 비어 있습니다. 이 빈 출력은 스테이징된 변경이 사라졌다는 뜻으로 해석하지 않습니다. 다음 커밋에 담길 내용은 git diff --cached에서 확인합니다.
git diff HEAD는 작업트리 전체와 HEAD를 비교합니다. 인덱스에 담긴 변경과 아직 인덱스에 담기지 않은 변경을 함께 살펴볼 때 쓰는 비교입니다. 따라서 커밋할 내용만 확인하는 git diff --cached와 목적이 다릅니다.
예제에서는 before가 after로 바뀐 뒤 먼저 일반 diff에 수정 줄이 나타납니다. git add note.txt를 실행하면 일반 diff는 비고, git diff --cached와 git diff HEAD에는 -before와 +after가 표시됩니다.
파일 상태도 함께 보려면 git status --short를 사용합니다. 예제의 M note.txt에서 첫째 칸의 M은 인덱스에 수정 내용이 있다는 뜻이고, 둘째 칸은 작업트리의 상태를 나타냅니다. 둘째 칸이 비어 있으면 스테이징 뒤 작업트리에 추가 수정이 없는 상태입니다. 새 파일이나 추적되지 않는 파일은 상태 목록에서 별도로 확인할 수 있으므로, diff가 비어 있을 때 status를 함께 보는 습관이 유용합니다.
어떤 명령으로 확인하나요
커밋 대상의 전체 패치를 확인할 때는 git diff --cached를 실행합니다. 변경된 줄 주변의 문맥을 줄이고 실제 추가·삭제 줄에 집중하려면 git diff --cached --unified=0을 사용합니다. 공식 문서에서 --unified=<n>은 diff에 포함할 문맥 줄 수를 지정하는 옵션으로 설명됩니다. 0을 지정하면 변경 줄 주변에 문맥 줄이 표시되지 않습니다.
작업트리 전체를 HEAD와 비교하려면 git diff HEAD를 실행합니다. 스테이징 전후의 위치를 나눠 확인하려면 git diff, git diff --cached, git diff HEAD를 순서대로 살펴보면 됩니다. 파일 이름과 상태만 빠르게 확인할 때는 git status --short가 적합합니다.
적용 조건과 다음 확인
이 절차는 Git 저장소 안에서 커밋을 만든 뒤 파일을 수정하고, 해당 파일을 git add로 스테이징한 상황에 적용됩니다. 스테이징한 뒤 파일을 다시 수정하면 일반 git diff에 새 수정이 다시 나타납니다. 이때 git diff --cached에는 먼저 담아 둔 내용이 남고, 일반 diff에는 이후 작업트리 수정이 보입니다. 두 결과를 나누어 확인한 뒤 새 수정까지 커밋에 넣으려면 해당 파일에 git add를 다시 실행하고 cached diff를 재확인하세요.
마지막으로 git status --short에서 첫째 칸과 둘째 칸을 함께 확인하면 커밋 대상과 추가 작업트리 수정을 구분할 수 있습니다. cached diff가 비어 있어도 수정이 전혀 없다고 단정하지 말고, 일반 diff와 status의 파일 목록까지 함께 확인하면 스테이징 위치와 추적 상태를 정확히 파악할 수 있습니다.
새 폴더에서 직접 확인하기
새 예제 폴더에서 실행하세요. 기존 프로젝트에서 초기화 명령을 실행하지 않습니다.
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 --unified=0실제로 확인한 출력
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 --unified=0
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-06
Git 공식 문서에서 명령의 비교 범위를 확인할 수 있어요.