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)
这是正确的理解还是工作方式不同?
三路合并通常意味着不是仅仅比较最终结果来执行合并,而是已经在查看公共基础版本。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 可能没有足够的公共内容来正确对齐更改。特别是对于非常小的文件,这可能会发生。