このページ内容は2022年9月9日以降、再調査・再検証してません。実際に扱う際は最新の情報にアクセスしてください。
コンフリクトが発生したときのマージ競合マーカーのモード (merge.conflictStyle) として、zdiff3が追加されました。zdiff3はdiff3の強化版でより正確で簡素な競合マーカーを示しますgit_235。
はじめに、diff3の説明をしつつ、zdiff3で何が変わったのか説明します。まず、コンフリクトを起こすための準備として、branchAにファイルを作成し、以下の文章を書くとします。
branchA1読書の習慣を作る
その後、branchAからbranchBを作り、以下の修正をコミットします。
branchB1先ず大切なことは2読書の習慣を作るということである。3習慣が実に多くのことを為すのである。
そして、branchAに戻り、以下の修正をコミットします (読書を運動に変えました)。
branchA1先ず大切なことは2運動の習慣を作るということである。3習慣が実に多くのことを為すのである。
最後に、branchAにbranchBをマージすると、コンフリクトが発生します。diff3だとこのようになります。|||||||
から =======
までは、コンフリクト箇所の共通の祖先を表しています。以下のマーカーから、共通の祖先に対し、HEADとbranchBで何を修正したかがそれぞれ分かります。
branchA1<<<<<<< HEAD2先ず大切なことは3運動の習慣を作るということである。4習慣が実に多くのことを為すのである。5||||||| c5ddf536読書の習慣を作る7=======8先ず大切なことは9読書の習慣を作るということである。10習慣が実に多くのことを為すのである。11>>>>>>> branchB
しかしdiff3を使用すると、マージされる側とマージする側で同じ要素が含まれている場合 (上の例では先ず大切なことは
と習慣が実に多くのことを為すのである。
が同じ要素) でも、それぞれ差分が表示されてしまいます。
zdiff3を使うと、以下のように共通部分を外に出して差分を表示してくれます。ちなみに以下では、branchBで「xxを作るということである」という文章を追加し、HEADで読書を運動に置き換えたんだなというのが分かりやすく表示されています。
branchA1先ず大切なことは2<<<<<<< HEAD3運動の習慣を作るということである。4||||||| c5ddf535読書の習慣を作る6=======7読書の習慣を作るということである。8>>>>>>> branchB9習慣が実に多くのことを為すのである。