2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

gitのmerge.conflictStyleに新しく追加されたzdiff3について見ていく

Last updated at Posted at 2022-11-07

概要

git 2.35で新しく merge.conflictStylezdiff3という設定が誕生したそうなので、どう変わったのかを見てみよう。
前提として意図的にコンフリクトするような環境は事前に作ってある
東京23区一覧を書いていくMarkdownを作った
スクリーンショット 0004-11-08 0.06.05.png

まずはデフォルトのmerge

# 明示的に指定するならこうだが、デフォルトがこの挙動だ
❯ git config --global merge.conflictStyle merge

❯ git merge adachi-ku
Auto-merging tokyo-23ku.md
CONFLICT (content): Merge conflict in tokyo-23ku.md
Automatic merge failed; fix conflicts and then commit the result.

❯ git diff
diff --cc tokyo-23ku.md
index 34042c5,80b4120..0000000
--- a/tokyo-23ku.md
+++ b/tokyo-23ku.md
@@@ -1,4 -1,4 +1,8 @@@
  * Chiyoda-ku
++<<<<<<< HEAD
 +* Meguro-ku
++=======
+ * Adachi-ku
++>>>>>>> adachi-ku
  * Shinjuku-ku
  * Minatoku-ku

当たり前のように見慣れた結果だw

続いてdiff3

# まずは設定
❯ git config --global merge.conflictStyle diff3

❯ git merge adachi-ku
Auto-merging tokyo-23ku.md
CONFLICT (content): Merge conflict in tokyo-23ku.md
Automatic merge failed; fix conflicts and then commit the result.

❯ git diff
diff --cc tokyo-23ku.md
index 34042c5,80b4120..0000000
--- a/tokyo-23ku.md
+++ b/tokyo-23ku.md
@@@ -1,4 -1,4 +1,10 @@@
  * Chiyoda-ku
++<<<<<<< HEAD
 +* Meguro-ku
 +* Shinjuku-ku
++||||||| 6ac52f7
++=======
+ * Adachi-ku
+ * Shinjuku-ku
++>>>>>>> adachi-ku
  * Minatoku-ku

個人的には見慣れている merge が圧倒的に見やすいwww
diff3はパイプが入るのと、マージ元になる枝分かれ前のコミットID:6ac52f7が出てくるのが特徴的だ

本日のメイン zdiff3

# まずは設定
❯ git config --global merge.conflictStyle zdiff3

❯ git merge adachi-ku
Auto-merging tokyo-23ku.md
CONFLICT (content): Merge conflict in tokyo-23ku.md
Automatic merge failed; fix conflicts and then commit the result.

❯ git diff
diff --cc tokyo-23ku.md
index 34042c5,80b4120..0000000
--- a/tokyo-23ku.md
+++ b/tokyo-23ku.md
@@@ -1,4 -1,4 +1,9 @@@
  * Chiyoda-ku
++<<<<<<< HEAD
 +* Meguro-ku
++||||||| 6ac52f7
++=======
+ * Adachi-ku
++>>>>>>> adachi-ku
  * Shinjuku-ku
  * Minatoku-ku

diff3zdiff3の違いが分かるだろうか?
zdiff3ではShinjuku-kuの情報がコンフリクトしていない、というのが大きな特徴だ。

公式ドキュメントによる説明

マージ時に競合したハンクが作業ツリーファイルに書き出されるスタイルを指定します。デフォルトは "merge" で、<<<<<衝突マーカー、一方が行った変更、========マーカー、もう一方が行った変更、そして >>>>> マーカーが表示されます。別のスタイルである "diff3" は、====== マーカの前に |||| マーカと元のテキストを追加します。マージ」スタイルは、元のテキストを除外するため、また、行のサブセットが両側で一致した場合、それらがちょうど競合領域から引き出されるため、diff3よりも小さい競合領域を生成する傾向がある。別のスタイルである "zdiff3 "はdiff3に似ていますが、両側で一致する行が競合領域の最初か最後の近くに現れると、競合領域から削除されます。

なるほど、確かに今回の例だとShinjuku-kuの情報だけがコンフリクトから外れたのも納得だ。
個人的にはmerge.conflictStyle zdiff3は普段から設定として含んでしまっていいかなと思いました!

ではまた!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?