git 中的 3 向合并 - 比较是如何工作的

Dus*_*ani 0 git merge git-merge branching-and-merging

我有该文件的三个版本:

version 1       common ancestor      version  2
-------------   ---------------      ------------- 
before          original line        original line
original line                        after
Run Code Online (Sandbox Code Playgroud)

比较这些版本以生成最终合并版本时会发生什么?

我已经阅读了一些关于这个主题的信息,但我仍然很困惑它到底是如何工作的。

至于后一个例子:

比较版本之间的单行是否为线性?如果是这样,则最终合并应如下所示:

1 line: before
2 line: conflict (both left and right contributors are changed compared to ancestor) 
Run Code Online (Sandbox Code Playgroud)

这是正确的理解还是工作方式不同?

pok*_*oke 5

三路合并通常意味着不是仅仅比较最终结果来执行合并,而是已经在查看公共基础版本。Git 然后所做的是为每个版本创建一个更改的表示。

因此,相对于基本版本,它实际得到的是以下内容:

version 1           version  2
-------------       -------------
+before              original line
 original line      +after
Run Code Online (Sandbox Code Playgroud)

然后它将使用公共行作为上下文来对齐更改:

version 1           version  2
-------------       -------------
+before
 original line       original line
                    +after
Run Code Online (Sandbox Code Playgroud)

此时,合并很容易解决,而不会与以下内容发生冲突:

before
original line
after
Run Code Online (Sandbox Code Playgroud)

请注意,此类合并可能仍会导致冲突,因为 Git 可能没有足够的公共内容来正确对齐更改。特别是对于非常小的文件,这可能会发生。