他の読者の場合 (およびこの記事から):
git には、マージの競合を形式で表示するオプションがありdiff3
ます (デフォルトでは、マージされる 2 つのファイルのみが表示されます)。次のように有効にできます。
git config --global merge.conflictstyle diff3
diff3 スタイルを有効にしない理由はありません。なぜなら、正しいマージが何であるかを判断するために祖先が必要になることがよくあるからです。
これはかなり早い段階 (2008 年)に導入されましたが、デフォルトではないと思います。デフォルトの Unixdiff
は 3 方向の差分として表示されないからです。
Git 2.35 では、zdiff3
( " Zealous diff3 ") もあります。
このスレッドで述べたように、config を設定せずにこのコマンドを実行して、通常の diff と diff3 を簡単に切り替えることができる場合、これは 1 つの特定のケースで可能です。
インデックスで競合がマークされている場合 (つまり、競合したマージの後、パスを解決済みとしてマークする前の状態)、次のことができます。
git checkout --conflict=diff3 <path...>
これは実際にはインデックスの内容を作業ツリーにチェックアウトしているため、競合する作業ツリーのコピーに対して行った編集は上書きされることに注意してください。
|||||| merged common ancestors
は git 2.24 (2019 年第 4 四半期) で進化することに注意してください。
コミット b657047 ( 2019年10月7日) 、コミット8e4ec33 ( 2019年10月1日)を参照してください。、コミット 4d7101e、コミット 724dd76、コミット 345480d、コミット b4db8a2、コミット 98a1d3d、コミット 9822175、commit 10f751c (2019 年 8 月 17 日) by Elijah Newren ( newren
) .
( 2019 年 10 月 15 日、コミット 280bd44でJunio C Hamanoによってマージされました)gitster
署名者: Elijah Newren
コミット 7ca56aa07619 ( " merge-recursive
: 先祖のラベルを追加"、2010-03-20、Git v1.7.1-rc0 --マージ) では、' ' 行にラベルが追加され||||||
、より有益な見出し ' |||||| merged common ancestors
'が付けられました。ステートメントで:
より有益なラベルを使用する方が良いでしょう。
いつか誰かが提供してくれるかもしれません。
この選択されたラベルは、再帰性が発生する場合、つまり複数のマージ ベースがある場合に完全に合理的でした。
(そのような場合、より良いラベルは思いつきません。)
しかし、ユニークなマージ ベースがある場合とマージ ベースがない場合は、実際にはやや誤解を招く可能性があります。
マージ ベースの数に基づいてこれを変更します。
>=2: "merged common ancestors"
1: <abbreviated commit hash>
0: "<empty tree>"
3 つのケースのそれぞれについて正しい祖先名を取得することを確認するためのテストも追加されています。
Git 2.25 (2020 年第 1 四半期) では、" " は、マージのように構成変数git apply --3way
を尊重することを学びました。merge.conflictStyle
commit 091489d、commit aa76ae4、commit 9580620、commit b006968、commit fa87b81 (2019 年 10 月 23 日) by Denton Liu ( Denton-L
)を参照してください。
( 2019 年 11 月 10 日、コミット eff313fでJunio C Hamanoによってマージされました)gitster
apply
: --3way の merge.conflictStyle を尊重する
署名者: Denton Liu
以前は、3 者間マージを実行する場合、このmerge.conflictStyle
オプションは考慮されず、 " " が指定されmerge
ていても常に " " スタイルが使用されていました。diff3
merge.conflictStyle 構成が読み取られるようにgit_xmerge_config()
、の最後に呼び出します。git_apply_config()