Git在合并冲突分支时的默认行为只是选择传入的更改而不突出显示,必须使用--edit,为什么



主分支内容

Hello 
Hi
Salut

其他分支内容

Hi
Hey
Yo

很明显,这应该是一个冲突的合并,git应该强调当前和即将发生的变化,但事实并非如此,它说:

$ git merge tampering
Merge made by the 'ort' strategy.
greetings.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

当我使用--edit合并时,它通常会突出显示

$ git merge tampering --edit
Auto-merging greetings.txt
CONFLICT (content): Merge conflict in greetings.txt
Automatic merge failed; fix conflicts and then commit the result.

在Git中,合并通常是三方合并,它只考虑三个点:两个头和一个称为合并基的点,通常是共同的祖先。

当执行合并时,如果一边有更改,但另一边没有更改,Git甚至不看文件的内容就采用了更改。(如果一方有一个对象ID与合并基相同的blob,而另一方没有,Git可以检测到这一点。(听起来这就是你的情况,这就是为什么没有合并冲突。

另一种发生相同情况的情况是,有人在合并的两侧进行相同的更改,然后恢复其中一个更改。被还原的一方没有变化,因此Git采用了这个变化,而大多数人认为这个变化已经被还原了。

相关内容