git が自動的にマージできた全ての変更は既に索引ファイルに 追加されています。そして git-diff(1) はコンフリクトだけを 表示します。そうするには通常の構文を使用します:
$ git diff
diff --cc file.txt
index 802992c,2b60207..0000000
--- a/file.txt
+++ b/file.txt
@@@ -1,1 -1,1 +1,5 @@@
++<<<<<<< HEAD:file.txt
+Hello world
++=======
+ Goodbye
++>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt
このコンフリクトを解決した後、コミットされる予定の内容は 通常と違って2つの親を持っていることを思い出してください;一方は HEAD、つまり現在のブランチの先端;もう一方はもうひとつのブランチの先端で MERGE_HEAD に格納されています。
マージしている間、索引は各ファイルの3つのバージョンを持っています。 この3つはそれぞれファイルの異なる3つの "ファイルステージ" を表現しています:
$ git show :1:file.txt # 両方のブランチの共通祖先のファイル
$ git show :2:file.txt # HEAD にあるバージョン
$ git show :3:file.txt # MERGE_HEAD にあるバージョン
コンフリクトが起こっている箇所を表示するために git-diff(1)を実行すると、 コンフリクトが起こったマージ結果の間の 三方向の差分(three-way diff)が表示されます。 差分にはステージ2と3双方からきたコンテンツ が混ざった状態で含まれています。 (言い換えるとハンクのマージ結果が ステージ2だけからなされる場合その部分ではコンフリクトは起こらず 表示されません。ステージ3についても同じです)
上記の差分は file.txt の作業ツリーのバージョンとステージ2とステージ3の バージョン間の差分を表示します。その為、各行の先頭に1つの "+" または "-" が 付けられるかわりに、2つの列が使用されます:1つ目は 1つ目の親と作業ディレクトリコピーの間の差分を表すのに利用され、 2つ目は2つ目の親と作業ディレクトリコピーの間の差分を表示するのに利用されます。 (このフォーマットの詳細は git-diff-files(1) の "COMBINED DIFF FORMAT" の 節を参照してください)
コンフリクトを通常と同じ方法で解決した後、(indexの更新前に) diff を 実行すると次のように表示されます:
$ git diff
diff --cc file.txt
index 802992c,2b60207..0000000
--- a/file.txt
+++ b/file.txt
@@@ -1,1 -1,1 +1,1 @@@
- Hello world
-Goodbye
++Goodbye world
これは、解決済みのバージョンが 一つ目の親から "Hello world" を削除し、 2つ目の親から "Goodbye" を削除し、 両方の親に存在しない "Goodbye world" を追加したことを表しています。
他の特別な diff オプションを使用すると、これら任意のステージと 作業ディレクトリとの差分を表示することができます。
$ git diff -1 file.txt # ステージ1との diff
$ git diff --base file.txt # 上記と同じ
$ git diff -2 file.txt # ステージ2との diff
$ git diff --ours file.txt # 上記と同じ
$ git diff -3 file.txt # ステージ3との diff
$ git diff --theirs file.txt # 上記と同じ
git-log(1) と gitk(1) コマンドもまた merge の手助けをしてくれます。
$ git log --merge
$ gitk --merge
これらは、HEAD または MERGE_HEAD にだけ存在する全てのコミットを表示し、 マージされていないファイルを表示します。
linkgit:git-mergetool を利用することもできます。これを利用すると Emacs や kdiff3 のような外部ツールを使用してマージを行うことができます。
ファイルのコンフリクトを解決した後には、索引を更新してください:
$ git add file.txt
すると、そのファイルの各ステージは "崩壊" され、
git diff
はもはや (デフォルトでは) そのファイルに対する差分を表示しません。