git add 뒤 다시 고친 파일에서 두 변경 확인하기
by 그릿 | GROWTH_ESSAY | 2026-10-16
#practical-guides #Git #개발파일을 git add한 뒤 다시 수정하면 변경이 두 위치에 나뉘어 보입니다. 먼저 아래 세 명령으로 각각의 상태를 확인하세요.
git diff --cached
git diff HEAD
git status --short왜 이렇게 보이나요
Git은 파일 내용을 작업트리와 인덱스, HEAD라는 세 지점으로 나누어 비교합니다. 작업트리는 현재 파일 내용이고, 인덱스는 다음 커밋에 넣도록 선택한 내용이며, HEAD는 현재 기준 커밋입니다.
git add note.txt를 실행하면 그 시점의 note.txt 내용이 인덱스에 담깁니다. 이때 git diff는 작업트리와 인덱스를 비교하므로 같은 내용이면 출력이 비어 있습니다. 커밋 대상으로 인덱스에 담긴 변경은 git diff --cached에서 HEAD와 비교해 확인할 수 있습니다.
git diff HEAD는 현재 작업트리와 HEAD 사이의 전체 차이를 보여줍니다. 그래서 인덱스에 담긴 변경과 아직 인덱스에 담기지 않은 변경을 함께 살펴볼 때 사용합니다. 두 명령은 비교 기준이 다르므로 결과가 같거나 달라질 수 있습니다.
어떤 명령으로 확인하나요
예제에서는 먼저 after를 기록하고 git add note.txt를 실행합니다. 이 상태에서 git diff는 비어 있고, git diff --cached에는 before에서 after로 바뀐 내용이 표시됩니다. git diff HEAD에도 현재 파일과 HEAD의 차이가 표시됩니다.
그 뒤 파일에 later를 기록하면 작업트리에는 인덱스의 after와 다른 내용이 생깁니다. git diff는 after에서 later로의 차이를 보여주고, git diff --cached는 계속 before에서 after로의 차이를 보여줍니다. 커밋에 들어갈 변경과 추가 수정 내용을 서로 나누어 검토할 수 있는 상태입니다.
상태 표시는 어떻게 읽나요
git status --short의 두 글자는 인덱스와 작업트리의 상태를 순서대로 표시합니다. 예제의 M note.txt에서 첫째 칸 M은 수정된 내용이 인덱스에 담겼다는 뜻입니다. 이후 다시 수정한 상태의 MM note.txt는 첫째 칸의 인덱스 변경과 둘째 칸의 작업트리 변경이 함께 있다는 뜻입니다.
따라서 커밋할 내용을 확인할 때는 git diff --cached를 먼저 보고, 아직 반영하지 않은 추가 수정은 git diff로 살핍니다. 현재 작업트리에서 HEAD까지의 전체 차이는 git diff HEAD로 확인합니다. 새 파일처럼 일반 diff에서 빠질 수 있는 항목은 git status --short를 함께 확인하면 상태를 놓치지 않습니다.
적용 조건과 다음 확인
명령은 Git 저장소 안에서 실행하고, 파일을 수정한 뒤 인덱스에 담은 시점과 다시 수정한 시점을 구분해 살펴보세요. git diff --cached가 비어 있으면 인덱스에 비교할 변경이 없는지 먼저 확인하고, 작업트리의 변경 여부는 git diff와 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
printf 'later\n' > note.txt
git diff
git diff --cached
git status --short실제로 확인한 출력
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
diff --git a/note.txt b/note.txt
index 294186e..e974158 100644
--- a/note.txt
+++ b/note.txt
@@ -1 +1 @@
-after
+later
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 status --short
MM note.txt
예제 확인: git version 2.50.1 (Apple Git-155), 2026-10-16
Git 공식 문서에서 명령의 비교 범위를 확인할 수 있어요.