合并分支时,git是否曾使用merge-base和merge commit之间的提交?

时间:2015-08-20 18:11:09

标签: git git-merge branching-and-merging

例如,假设我们有两个分支“master”和“alt”。 “主”分支提交“A”,“B”,“C”和“D”,而“alt”分支提交“A”,“B”,“和”D“。提交“D”表示从alt到master的合并。以下是我尝试绘制这种关系的方法:

A <-- B <-- C <--- D \ / \---B'<--------/

问题:由于提交A显然是B'C的合并基础,确实git都需要B中找到的信息(即,合并提交和合并基础之间的提交)?如果答案是否定的,是否有任何特殊情况答案是肯定的?

2 个答案:

答案 0 :(得分:1)

“......根本需要B ......中找到的信息”的概念并不是特别清楚。但也许理解git merge内幕后发生的事情会帮助你回答你自己的问题......

根据您描述的树和您描述的到达方法(git checkout master; git merge alt - 虽然您应该知道这不会导致alt也指向D,所以您的断言是alt包含D提交不正确,除非您做了其他事情影响该事件,发生的情况是git merge找到A作为合并基础。然后,它会在AC(合并前master的提示)之间以及AB'之间创建增量({1}的提示}),然后尝试干净地组合这两个增量并将合并的增量应用于alt - 这个新状态变为A。如果两个分支增量无法完全组合,那么您就会发生冲突 - 最可能的原因是D更改了B'B中也发生变化的某些行,但不是以同样的方式。

因此,严格来说,不,C在合并过程中并不特别关注提交git;但是,由于B引入的更改也出现在B中(在C没有撤消它们的情况下,无论如何),然后在{{1}中找到了“在某种意义上“使用”......

答案 1 :(得分:0)

Git确实需要BC的信息,因为这些提交可能会修改与提交B'相同的代码行,这会导致您需要在合并提交D中解决的冲突。