Gitコマンド

git diff

異なるコミットと作業ツリーの比較します。オプションにより、インデックス、任意のコミットなど対象を任意に指定できます。

git diff の概要

git diff はコミット間の変更や、作業ツリー、およびインデックスなどと、差分を確認するコマンドです。

基本は、指定した対象からの作業ツリーへの差分を表示するコマンドですが、オプションによって、インデックスへの差分や、任意のコミットへの差分を確認することができます。

オプションによっては、Git の追跡対象ではないファイルを対象として指定することも可能です。

使用例

デフォルトでの振る舞いが、「 [インデックス] → [作業ツリー] と見た時の差分を表示」である事を覚えておくと、それ以外のオプションの理解が早いでしょう。

インデックス→ [作業ツリー] の差分を表示する

最も基本となる比較です。

// インデックスと作業ツリーの比較
git diff

最新コミット→ [作業ツリー] の差分を表示する

現在チェックアウトしているブランチの最新のコミットと、作業ツリーの比較です。この場合明示的にコミットを指定します。下記は、コミットへの参照である「HEAD」と指定していますが、コミット識別子(SHA-1)でも構いません。

// 最新コミットと作業ツリーの比較
git diff HEAD

最新コミット→ [インデックス] の差分を表示する

作業ツリーでなく、インデックスを比較対象にするには、「--cached」オプションを指定します。

// 最新コミットと作業ツリーの比較
git diff --cached
git diff --cached HEAD // 同義

コミット→ [コミット] の差分を表示する

コミット同士を比較するには、単純に両方を指定する事になります。この場合、[第一引数] → [第二引数] と比較した時の差分となります。

// 最新コミットと作業ツリーの比較
git diff <commit> <commit>
git diff <commit>..<commit> // 同義

git diff のオプションと振る舞いの違い

特定のパスに限定する

特に離れたコミット間の差分は、変更量が多くなるかもしれません。パスを指定することで、比較対象を限定できます。

// 最新コミットと作業ツリーの比較
git diff <commit> <commit> -- ./inc/*

主なオプション

--no-index

Git 追跡対象ではないファイルを比較します。

--cached

前述の通り、インデックスを比較対象に変更します。git commit コマンドの実行直前に、インデックスの状態確認のためよく利用します。

--name-status

ファイルのステータスの変更のみを表示します。

  • Added (A)
  • Copied (C)
  • Deleted (D)
  • Modified (M)
  • Renamed (R)
  • Type (i.e. regular file, symlink, submodule, …​) changed (T)
  • Unmerged (U)
  • Unknown (X)
  • Pairing Broken (B)

その他のオプション

git diffで利用可能な主なオプション

オプション 詳細
--name-only 差分が生じたファイル名のみを表示します。
--name-status 変更があったファイルのステータス(上述)を表示します。
--word-diff={mode} 通常、行単位の差分を表示しますが、このオプションで、単語単位での差分を表示できるようになります。modeは、color, plain (default), porcelain, noneなどがあります。
--no-renames ファイルの名前変更の検出を停止します。
--binary バイナリレベルので差分を表示します。
-b, --ignore-space-change 1つ以上のスペースに対し、スペースの数の変更を無視します。行の末尾の変更は無視されます。
-w, --ignore-all-space いかなるスペースも無視します。
--ignore-blank-lines 空白行の違いを無視します。

Git公式ドキュメント

Git公式ドキュメント「git diff」へのリンクです。