当一个git提交有多个父节点时,统计数据是根据什么计算的?



当一个提交有多个父级时,就像这个,我们看到它有4 additions4 deletions。我的问题是和什么相比?添加和删除是否与存在于双亲中的文件相比较?或者是如何进行比较的?

这是一个三向合并:

  • 双亲的共同祖先(git merge-base @^1 @^2, ^1为HEAD的第一个父代,^2为HEAD的第二个父代,参见"祖先参考")
  • 第二个父级(提交c0ce149)作为源(被合并到)
  • 第一个父级(提交0994e7c)作为目标(在发生合并的分支上)
  • , HEAD (commit 4cd713e)是合并的结果。

(你可以在这个答案中看到另一个三向合并的例子)

按照约定,GitHub总是将父目录显示为:

  • 第一个父级,这是你合并时所在的分支,
  • 和第二个父级,它是你合并的分支上的提交。

与这两个提交的共同祖先相比,第二个提交在合并到第一个提交时,增加了4个添加和4个删除。


短语"与那两个委员会的共同祖先相比";对于理解正在进行更改的上下文非常重要。

当合并提交在Git中发生时,相对于被合并的两个分支的共同祖先计算更改。这个共同的祖先是两个分支共享的最近的提交。

让我们举一个简单的例子:

  1. 你有一个分支A,最近的提交是A1
  2. 在提交A1时从A创建一个新的分支B。你做更改并将其提交到B1
  3. 同时A也有作为A2提交的变更。

现在,您要将B合并到A中。这里的共同祖先是A1,即B的分支点。B(在提交B1中)所带来的更改与A1进行比较,而不是与A (A2)上的最新提交进行比较。

在这种情况下,合并将是A1(共同祖先),A2(在A上最近提交)和B1(在B上最近提交)之间的三向合并。Git会尝试将A1B1的更改应用到A2上。提交统计(添加和删除)是相对于这个共同祖先(A1)计算的。

短语"与那两个委员会的共同祖先相比";强调更改不是直接在两个分支最近提交时进行比较,而是从它们偏离的点进行比较。

相关内容

最新更新