在git merge中如果一个文件在合并的分支中不存在会发生什么

aamkag61  于 2023-04-28  发布在  Git
关注(0)|答案(1)|浏览(175)

我有一个关于不同分支的几个合并的问题。

步骤

考虑AB是最新的Master

  1. A添加了一些文件并更改了一些其他文件。
  2. B还添加了一些其他文件。
  3. A推送其提交,MasterA合并。

常见问题

现在如果B推送他的提交与Master合并,会发生什么?我想到了一些可能性:

  1. A中的文件是否已删除?
  2. A已经更改但在B中没有更改的旧文件怎么办?
    那些会怎么样?
    我害怕这样做,因为我认为这将删除其他的文件。
sczxawaw

sczxawaw1#

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

相关问题