我的问题基于以下示例:https : //git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
举个例子:
git merge master <branch of iss53>,导致Merge made by the 'recursive' strategy.但为什么?
我预期:由于祖先将变量设置为2,而commit(iss53)也将变量设置为2,因此合并后的结果应为2。因为公共祖先和最新版本的变量设置为2
这种行为取决于合并策略吗?
编辑:我忘了提及,我在C3中更改了变量= 3。但是结果是一样的。
我不知道,如果你列出的步骤是逐字到底发生了什么,但如果是这样,那么在提交C3该变量的值仍为2,而事实上该变量的值是不变的,因为提交C2的iss53分支。然后,您合并master为iss53。这带来了Git认为是来自功能分支的更改,该更改是该变量现在具有值4。Git保留了来自的版本master,这是我通常期望的Git自动合并算法的行为。
如果两个分支都更改了变量的值,则将发生合并冲突。例如,如果在commit C3中将变量更改为5,则Git将不知道默认值是哪个版本的真理,因此它不会自动合并,而是将该行标记为合并冲突。