例如,假设我们有两个分支“master”和“alt”。 “主”分支提交“A”,“B”,“C”和“D”,而“alt”分支提交“A”,“B”,“和”D“。提交“D”表示从alt到master的合并。以下是我尝试绘制这种关系的方法:
A <-- B <-- C <--- D
\ /
\---B'<--------/
问题:由于提交A
显然是B'
和C
的合并基础,确实git都需要B
中找到的信息(即,合并提交和合并基础之间的提交)?如果答案是否定的,是否有任何特殊情况答案是肯定的?
答案 0 :(得分:1)
“......根本需要B
......中找到的信息”的概念并不是特别清楚。但也许理解git merge
内幕后发生的事情会帮助你回答你自己的问题......
根据您描述的树和您描述的到达方法(git checkout master; git merge alt
- 虽然您应该知道这不会导致alt
也指向D
,所以您的断言是alt
包含D
提交不正确,除非您做了其他事情影响该事件,发生的情况是git merge
找到A
作为合并基础。然后,它会在A
和C
(合并前master
的提示)之间以及A
和B'
之间创建增量({1}的提示}),然后尝试干净地组合这两个增量并将合并的增量应用于alt
- 这个新状态变为A
。如果两个分支增量无法完全组合,那么您就会发生冲突 - 最可能的原因是D
更改了B'
或B
中也发生变化的某些行,但不是以同样的方式。
因此,严格来说,不,C
在合并过程中并不特别关注提交git
;但是,由于B
引入的更改也出现在B
中(在C
没有撤消它们的情况下,无论如何),然后在{{1}中找到了“在某种意义上“使用”......
答案 1 :(得分:0)
Git确实需要B
和C
的信息,因为这些提交可能会修改与提交B'
相同的代码行,这会导致您需要在合并提交D
中解决的冲突。