PR

git diffで何も出ない?ステージ済み・未追跡の変更を確認する

git diffでステージ済みと未ステージの差分を確認するイラスト 開発
記事内に広告が含まれています。

ファイルを変更したのに、git diff を実行しても何も出ない。そんなときは「変更が消えた」と決める前に、ステージ済みかどうかを確認します。

git diff は、手元のすべての変更を一度に表示するコマンドではありません。何と何を比べるかで、出力が変わります。この記事では、ステージ前後の違いと、未追跡ファイルの確認方法をサンプルで確かめます。

検証日は2026年10月4日、環境はmacOS、Git 2.50.1(Apple Git-155)です。既存の作業に影響しない独立したサンプルリポジトリで、編集時にコマンドの出力を確認しました。

まずは3つのコマンドで確認する

git status --short --untracked-files=all
git diff
git diff --cached
コマンド確認するもの
git status --short --untracked-files=allステージ済み・未ステージ・未追跡などの状態
git diff作業ツリーとステージ領域の差分
git diff --cachedステージ領域とHEADの差分
git diff HEAD追跡ファイルの現在の内容とHEADの差分

HEAD は現在チェックアウトしているコミットを指し、通常は現在のブランチの先端です。この記事は、少なくとも一つコミットがあるリポジトリを前提にします。git diff --staged は git diff --cached と同じ意味で使えます。

状態ごとの出力を先にまとめると、次のようになります。

状態status --shortdiffdiff --cached
追跡ファイルを編集 M表示ありなし
編集内容をすべてステージM なし表示あり
ステージ後に追加編集MM追加編集分ステージした分
未追跡ファイル??なしなし

「次のコミットに何が入るか」を見たいなら、まず git diff --cached を読みます。ここでは通常の git commit を前提にしています。git commit -a やファイル指定は、ステージ領域だけを見る操作とは扱いが変わります。

git addのあとに何も出ないのは正常なことがある

説明用のサンプルとして、すでに追跡されている sample.txt の内容を before から after に変えました。最初は git diff に変更が出ます。

-before
+after

そのファイルをステージします。

git add -- sample.txt
git diff
git diff --cached

編集時の検証では、git diff の出力が空になり、git diff --cached に同じ変更が出ました。作業ツリーとステージ領域が同じになったため、前者には差分がありません。

この状態は、まだコミット済みという意味ではありません。git status --short では次のように表示されます。

M  sample.txt

2列ある状態記号のうち、左側がステージ領域の状態、右側が作業ツリーの状態です。この例の M は左側にあります。

git addのあとに編集すると両方に差分が出る

ステージしたあとで、同じファイルをさらに編集して after-again にしました。

MM sample.txt

今度は両方の列に M が出ます。

  • git diff --cached は before から after への変更
  • git diff は after から after-again への変更
  • git diff HEAD は before から after-again への変更

git add は実行した時点の内容をステージします。その後の編集が自動で加わるわけではありません。通常の git commit なら、この例で記録されるのは after までです。

追加の編集も同じコミットへ入れるなら、内容を確認してからもう一度ステージします。別の目的なら、未ステージのまま残す方法もあります。

新規ファイルはgit diffだけでは見つからない

まだGitで追跡されていない new.txt を作ったサンプルでは、git status --short に次の表示が出ました。

?? new.txt

通常の git diff には、そのファイルの内容は出ません。git diff HEAD も未追跡ファイルの一覧を代わりに出してくれるものではありません。

コミットに必要なファイルなら、ファイルの内容を確認してから個別にステージします。

git add -- new.txt
git diff --cached -- new.txt

確認前に一括で追加すると、作業メモや不要な生成物まで入りかねません。無視対象のファイルは git status の通常の表示にも出ないため、それも含めて全ファイルを確認できたとは考えないでください。

部分ステージしたときも2つのdiffを見る

追跡済みファイルに別々の修正がある場合は、git add -p で必要な差分だけを選べます。

git add -p -- sample.txt
git diff --cached -- sample.txt
git diff -- sample.txt

選択画面では、一般に y が表示中の差分を追加、n が見送り、s が分割です。変更が近すぎると分割できない場合もあります。分けられないときは無理に操作せず、ファイルの編集を整理してから選び直します。

部分ステージのあとにテストが通っても、通常は作業ツリーをテストしています。未ステージの変更がないと動かないコミットになっていないか、別に確認が必要です。

出力が空でも、まだ確認することがある

3つのコマンドでも想定した変更が見つからない場合は、保存先のファイル、作業しているリポジトリやブランチ、指定したパスを確認します。バイナリやサブモジュールなどは、通常のテキストファイルと表示が異なります。

AIにGit操作を任せるときも、「差分を見て」だけでなく、どの差分を確認してほしいかを書きます。

git status --short --untracked-files=all、git diff、git diff --cached を確認してください。
コミットへ入る変更と、手元に残る変更を分けて報告してください。
未追跡ファイルがあれば、今回の作業に必要かも確認してください。

変更を確認したあと、メッセージをどう書くかは、Gitコミットメッセージの書き方へ進めます。

参考資料

更新履歴

  • 2026-10-04: 初稿作成。ステージ前後、追加編集、未追跡ファイル、部分ステージの挙動をサンプルで確認
タイトルとURLをコピーしました