最近diff3を有効にしたので、競合を解決するのがはるかに簡単になりました。
以前は、場合によっては、ログをチェックして、なぜこれを行ったのか、そしてマージを行うためにそれを行ったのかを確認する必要がありました。しかしdiff3では、情報はすべて1か所に表示されます
<<<<<<< HEAD
THIS IS USEFUL
||||||| merged common ancestors
This is useful
=======
This is really useful
>>>>>>> c2392943.....
それから、結果は "THIS IS REALLY USEFUL"となるはずです。
Diff3にマイナス面はあるのでしょうか?なぜそれがgitのデフォルトの動作ではないのですか?
他の読者(そして この記事から ):
gitには、マージの競合を_
diff3
_形式で表示するオプションがあります(デフォルトでは、マージされる2つのファイルのみが表示されます)。次のように有効にできます:
_git config --global merge.conflictstyle diff3
_
正しいマージが何であるかを決定するために祖先が頻繁に必要になるため、diff3スタイルを有効にしてはならない理由は本当にありません。
これは かなり早い(2008年) で導入されました。デフォルトのUNIX差分は3ウェイ差分として表示されないため、これはデフォルトではないようです。
前述のように このスレッド内 で、設定を設定せずにこのコマンドを実行して、通常のdiffとdiff3sを簡単に切り替えることができるようにする場合、これは特定のケースで可能です。
インデックスで競合がマークされている場合(つまり、競合がマージされた後、パスを解決済みとしてマークする前の状態)、次のことができます。
_git checkout --conflict=diff3 <path...>
_
これは実際にインデックスの内容を作業ツリーにチェックアウトしているため、競合する作業ツリーのコピーに対して行った編集は上書きされることに注意してください。
_|||||| merged common ancestors
_はgit 2.24(Q4 2019)で進化することに注意してください
commit b657047 (2019年10月7日)、 commit 8e4ec (2019年10月1日)、および commit 4615a8c 、 commit 45ef16f を参照=、 commit f3081da 、 commit 5bf7e57 、 commit e95e481 、 commit a779fb8 、 commit 8599ab4 =、 commit 7c0a6c8 、 commit c749ab1 、 commit bab5687 、 commit ff1bfa2 、 commit 4d7101e =、 commit 724dd76 、 commit 345480d 、 commit b4db8a2 、 commit 98a1d3d 、 commit 9822175 =、 commit 10f751c (2019年8月17日)by Elijah Newren(newren
) 。
( Junio C Hamano-gitster
- によってマージ commit 280bd44 、2019年10月15日)
_
merge-recursive
_ :diff3共通の祖先により適切なラベルを提供しますサインオフ:Elijah Newren
commit 7ca56aa07619 ( "_
merge-recursive
_:add a label for ancestor"、2010-03-20、Git v1.7.1-rc0- merge )、a '_||||||
_'行にラベルが追加され、よりわかりやすい見出し '_|||||| merged common ancestors
_'が次のステートメントで示されます。より情報量の多いラベルを使用した方がよいでしょう。
おそらく誰かがいつか1つ提供するでしょう。この選択されたラベルは、再帰が始まるとき、つまり複数のマージベースがあるとき、完全に合理的でした。
(私はそのような場合、より良いラベルを考えることはできません。)
ただし、一意のマージベースがある場合、またはマージベースがない場合は、実際には多少誤解を招きます。
マージベースの数に基づいてこれを変更します。
_>=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 958062 、 commit b006968 、 commit fa87b81 を参照してください(2019年10月23日) Denton Liu(_Denton-L
_) による。
( Junio C Hamano-gitster
- によってマージ commit eff313f 、2019年11月10日)
apply
:--3wayのmerge.conflictStyleを尊重しますサインオフ:Denton Liu
以前は、3者間マージを行う場合、_
merge.conflictStyle
_オプションが考慮されず、 "_diff3
_"が指定されていても、常に "merge
"スタイルが使用されていました。
git_xmerge_config()
の最後でgit_apply_config()
を呼び出して、merge.conflictStyle構成が読み取られるようにします。