トラブルシューティング

git diff で差分が表示されない

git diff を実行しても何も表示されない場合の原因と対処法

git diff で差分が表示されない diagram

よくある原因: ステージ済みの変更

git diff は「ワーキングディレクトリ」と「ステージングエリア」の差分を表示します。

git add で変更をステージした後は、ワーキングディレクトリとステージングエリアが一致するため、git diff は何も表示しません。

ステージ済みの変更を確認するには --staged オプションが必要です。

git diff と git diff --staged の使い分け

  • git diff

    ワーキングディレクトリとステージングエリアの差分を表示します。まだ git add していない変更を見たいときに使います。

  • git diff --staged(または --cached

    ステージ済みでまだコミットしていない変更を表示します。

  • git diff HEAD

    ステージ済み + 未ステージの両方の変更を HEAD と比較して表示します。「今 commit したら何が入るか」を知るのに便利です。

bash
# 未ステージの変更を表示
git diff

# ステージ済みの変更を表示
git diff --staged

# HEAD との差分をすべて表示
git diff HEAD

新規ファイルが表示されない場合

git diff は追跡対象(tracked)のファイルのみを比較します。

新規作成して一度も add していないファイル(untracked)は diff に表示されません。

新規ファイルを含めるには、先に git add してから git diff --staged で確認するか、git status で未追跡ファイルを確認します。

bash
# 新規ファイルの確認
git status

# 新規ファイルをステージしてから差分確認
git add newfile.txt
git diff --staged

状況別の早見表

  1. まず git status で現在の状態を確認

    ファイルがどのセクションに並んでいるかを見れば、どの diff コマンドを使えば良いか判断できます。

  2. 「Changes to be committed」にある

    ステージ済みです。git diff --staged で差分を確認します。

  3. 「Changes not staged」にある

    未ステージです。git diff で差分が見えます。

  4. 「Untracked files」にある

    まだ Git の追跡対象ではありません。git add してから git diff --staged で確認するか、エディタで直接中身を見ます。

bash
# まずは状態確認
git status

# 状態に応じたコマンド
git diff            # "Changes not staged" の内容
git diff --staged   # "Changes to be committed" の内容
git diff HEAD       # 両方まとめて確認

関連コマンド