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