このページ内容は2022年9月9日以降、再調査・再検証してません。実際に扱う際は最新の情報にアクセスしてください。

link
Git 2.35 zdiff3

コンフリクトが発生したときのマージ競合マーカーのモード (merge.conflictStyle) として、zdiff3が追加されました。zdiff3はdiff3の強化版でより正確で簡素な競合マーカーを示しますgit_235

はじめに、diff3の説明をしつつ、zdiff3で何が変わったのか説明します。まず、コンフリクトを起こすための準備として、branchAにファイルを作成し、以下の文章を書くとします。

branchA
1
読書の習慣を作る

その後、branchAからbranchBを作り、以下の修正をコミットします。

branchB
1
先ず大切なことは
2
読書の習慣を作るということである。
3
習慣が実に多くのことを為すのである。

そして、branchAに戻り、以下の修正をコミットします (読書を運動に変えました)。

branchA
1
先ず大切なことは
2
運動の習慣を作るということである。
3
習慣が実に多くのことを為すのである。

最後に、branchAにbranchBをマージすると、コンフリクトが発生します。diff3だとこのようになります。||||||| から ======= までは、コンフリクト箇所の共通の祖先を表しています。以下のマーカーから、共通の祖先に対し、HEADとbranchBで何を修正したかがそれぞれ分かります。

branchA
1
<<<<<<< HEAD
2
先ず大切なことは
3
運動の習慣を作るということである。
4
習慣が実に多くのことを為すのである。
5
||||||| c5ddf53
6
読書の習慣を作る
7
=======
8
先ず大切なことは
9
読書の習慣を作るということである。
10
習慣が実に多くのことを為すのである。
11
>>>>>>> branchB

しかしdiff3を使用すると、マージされる側とマージする側で同じ要素が含まれている場合 (上の例では先ず大切なことは習慣が実に多くのことを為すのである。が同じ要素) でも、それぞれ差分が表示されてしまいます。

zdiff3を使うと、以下のように共通部分を外に出して差分を表示してくれます。ちなみに以下では、branchBで「xxを作るということである」という文章を追加し、HEADで読書を運動に置き換えたんだなというのが分かりやすく表示されています。

branchA
1
先ず大切なことは
2
<<<<<<< HEAD
3
運動の習慣を作るということである。
4
||||||| c5ddf53
5
読書の習慣を作る
6
=======
7
読書の習慣を作るということである。
8
>>>>>>> branchB
9
習慣が実に多くのことを為すのである。

自己紹介
はじめまして Pilefortです。
東京でエソジニアをしてます。
興味のあるスタックは、JavaScript (React, Vue), TypeScript, Rust, WebAssembly, AWS, Pulumi, Serverless Frameworkです。
このブログでは、普段の業務や趣味で気になったことをまとめたり、フロントやAWS, GitHubやTwitterで見かけた面白い記事やニュースをまとめるためのものです。少しでも何かの役に立てば幸いです。
サイトマップ
Notes
業務や趣味での気づき・メモ
Snippets
記事にするまでもないけど、便利なコマンドや豆知識
Works
同人誌一覧