git如何自动合并两个分支?

DeV*_*olt 4 git

我的问题基于以下示例:https : //git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging

在此处输入图片说明

举个例子:

  1. 在提交C2中设置变量= 2,然后在C4中更改为变量= 4,然后在C5中更改为变量= 2
  2. 制作一个git merge master <branch of iss53>,导致Merge made by the 'recursive' strategy.
  3. 变量是4。

但为什么?

我预期:由于祖先将变量设置为2,而commit(iss53)也将变量设置为2,因此合并后的结果应为2。因为公共祖先和最新版本的变量设置为2

这种行为取决于合并策略吗?

编辑:我忘了提及,我在C3中更改了变量= 3。但是结果是一样的。

Tim*_*sen 5

我不知道,如果你列出的步骤是逐字到底发生了什么,但如果是这样,那么在提交C3该变量的值仍为2,而事实上该变量的值是不变的,因为提交C2iss53分支。然后,您合并masteriss53。这带来了Git认为是来自功能分支的更改,该更改是该变量现在具有值4。Git保留了来自的版本master,这是我通常期望的Git自动合并算法的行为。

如果两个分支都更改了变量的值,则将发生合并冲突。例如,如果在commit C3中将变量更改为5,则Git将不知道默认值是哪个版本的真理,因此它不会自动合并,而是将该行标记为合并冲突。