基本

git diff

ファイルの変更内容を比較して差分を表示します。作業ツリー・ステージング・コミット間の3パターンで利用できます。

構文 git diff [<options>] [<commit>] [--] [<path>...]

オプション

フラグ 説明
--staged, --cached ステージングエリアと直前のコミット(HEAD)の差分を表示します。コミット前の最終確認に使います。
--stat ファイルごとの変更行数の統計を表示します。差分の概要を把握したいときに便利です。
--name-only 変更されたファイルの名前だけを表示します。
-w, --ignore-all-space 空白の変更を無視して差分を表示します。
--word-diff 行単位ではなく単語単位で差分を表示します。文章の変更確認に適しています。

git diff は、ファイルの変更内容を比較します。「どのファイルの、どの行が、どう変わったか」を詳細に確認できます。

3つの比較パターン

パターン1: 作業ツリー vs ステージング

# まだステージングしていない変更を確認
git diff

git add する前の変更内容を確認できます。

パターン2: ステージング vs HEAD(コミット済み)

# ステージング済みの変更を確認(コミット前の最終チェック)
git diff --staged

# --cached は --staged の別名
git diff --cached

git add した後、git commit する前に「本当にこれでいいか」を確認するのに使います。

パターン3: コミット間の比較

# 2つのコミットの差分を確認
git diff abc1234 def5678

# ブランチ間の差分を確認
git diff main feature-branch

# 直前のコミットとの差分
git diff HEAD~1 HEAD

差分の読み方

diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,4 +1,5 @@
 # タイトル
-古いテキスト
+新しいテキスト
+追加された行
 変わらない行
記号意味
-削除された行(変更前)
+追加された行(変更後)
空白変更なし(文脈表示)

よく使うオプション

# 変更の統計だけを表示(詳細を省略)
git diff --stat

# 変更されたファイル名だけを確認
git diff --name-only

# 空白の変更を無視する
git diff -w

# 単語単位で差分を表示
git diff --word-diff

特定ファイルの差分を確認

# 1ファイルだけの差分を表示
git diff README.md

# ステージング済みの特定ファイルを確認
git diff --staged src/index.js

git status との使い分け

コマンドわかること
git statusどのファイルが変更されたか(ファイル名)
git diff何がどう変わったか(行単位の詳細)

大まかな変更ファイルを確認したいときは git status、詳細な変更内容を見たいときは git diff を使います。