我的问题基于以下示例: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。但是结果是一样的。
答案 0 :(得分:5)
我不知道您列出的步骤是否逐字逐句地实际发生了什么,但是如果是这样,那么在提交C3
中,变量仍然具有值2,实际上,由于提交{ C2
分支中的{1}}。然后,您将iss53
合并到master
中。这带来了Git认为是来自功能分支的更改,该更改是该变量现在具有值4。Git保留了来自iss53
的版本,这是我通常期望的行为Git的自动合并算法。
如果两个分支更改了变量的值,则将发生合并冲突。例如,如果在提交master
中将变量更改为5,则Git将不知道默认值是哪个版本的真值,因此它不会自动合并,而是将该行标记为合并冲突。 / p>
答案 1 :(得分:1)
按时间顺序更新哪个版本无关紧要。这取决于您要合并的分支的内容以及 common 祖先的内容。
C2说2,C5说2(因此C2没有变化),C4说4(有变化),因此git在合并后将其保持为4。
您可能有一些时髦的场景,例如在C3上将值设置为6,然后在C5上将值设置为2 .....在这种情况下,C2仍然 不变,因此最终结果将为4因为C2和C5之间没有变化(即使中间有变化)。