我有一个关于不同分支的几个合并的问题。
考虑A和B是最新的Master。
A
B
Master
现在如果B推送他的提交与Master合并,会发生什么?我想到了一些可能性:
sczxawaw1#
当Git进行常规(非章鱼)合并时,它只考虑三点:正在合并的两个头部(A和B),以及一个称为 merge base 的点,它通常是最近的共同祖先。合并的结果实际上是合并基与A之间的差异以及合并基与B之间的差异的总和,假设不存在冲突。因此,如果A添加了一些不在合并库中的文件,而B没有,则结果将是这些文件存在于结果中。类似地,如果A对现有文件进行了一些更改,而B没有修改它们,则结果将包括这些更改。这是因为在这两种情况下,一方改变了,另一方没有,所以Git采用了这种改变(事实上,这是微不足道的)。如果A和B都添加了一个文件,或者它们都对同一区域中的同一文件进行了更改,则会出现问题。在这种情况下,就会发生冲突,并且在合并时必须有人来修复它。请注意,不考虑中间更改,只考虑合并基底和头部之间的差异。如果A做了一个修改并恢复了它,而B也做了同样的修改,那么结果就是这个修改被采纳了,因为A的一方在合并基和A之间没有修改,而B的一方有,所以Git会采纳这个修改。
1条答案
按热度按时间sczxawaw1#
当Git进行常规(非章鱼)合并时,它只考虑三点:正在合并的两个头部(A和B),以及一个称为 merge base 的点,它通常是最近的共同祖先。合并的结果实际上是合并基与A之间的差异以及合并基与B之间的差异的总和,假设不存在冲突。
因此,如果A添加了一些不在合并库中的文件,而B没有,则结果将是这些文件存在于结果中。类似地,如果A对现有文件进行了一些更改,而B没有修改它们,则结果将包括这些更改。这是因为在这两种情况下,一方改变了,另一方没有,所以Git采用了这种改变(事实上,这是微不足道的)。
如果A和B都添加了一个文件,或者它们都对同一区域中的同一文件进行了更改,则会出现问题。在这种情况下,就会发生冲突,并且在合并时必须有人来修复它。
请注意,不考虑中间更改,只考虑合并基底和头部之间的差异。如果A做了一个修改并恢复了它,而B也做了同样的修改,那么结果就是这个修改被采纳了,因为A的一方在合并基和A之间没有修改,而B的一方有,所以Git会采纳这个修改。