当一个提交有多个父级时,就像这个,我们看到它有4 additions
和4 deletions
。我的问题是和什么相比?添加和删除是否与存在于双亲中的文件相比较?或者是如何进行比较的?
这是一个三向合并:
- 双亲的共同祖先(
git merge-base @^1 @^2
,^1
为HEAD的第一个父代,^2
为HEAD的第二个父代,参见"祖先参考") - 第二个父级(提交c0ce149)作为源(被合并到)
- 第一个父级(提交0994e7c)作为目标(在发生合并的分支上)
- , HEAD (commit 4cd713e)是合并的结果。
(你可以在这个答案中看到另一个三向合并的例子)
按照约定,GitHub总是将父目录显示为:
- 第一个父级,这是你合并时所在的分支,
- 和第二个父级,它是你合并的分支上的提交。
与这两个提交的共同祖先相比,第二个提交在合并到第一个提交时,增加了4个添加和4个删除。
短语"与那两个委员会的共同祖先相比";对于理解正在进行更改的上下文非常重要。
当合并提交在Git中发生时,相对于被合并的两个分支的共同祖先计算更改。这个共同的祖先是两个分支共享的最近的提交。
让我们举一个简单的例子:
- 你有一个分支
A
,最近的提交是A1
。 - 在提交
A1
时从A
创建一个新的分支B
。你做更改并将其提交到B1
。 - 同时
A
也有作为A2
提交的变更。
现在,您要将B
合并到A
中。这里的共同祖先是A1
,即B
的分支点。B
(在提交B1
中)所带来的更改与A1
进行比较,而不是与A
(A2
)上的最新提交进行比较。
在这种情况下,合并将是A1
(共同祖先),A2
(在A
上最近提交)和B1
(在B
上最近提交)之间的三向合并。Git会尝试将A1
到B1
的更改应用到A2
上。提交统计(添加和删除)是相对于这个共同祖先(A1
)计算的。
短语"与那两个委员会的共同祖先相比";强调更改不是直接在两个分支最近提交时进行比较,而是从它们偏离的点进行比较。