实际上在GitHub上显示的合并提交的区别是什么?

时间:2018-06-28 10:37:55

标签: git github merge version-control dvcs

考虑以下提交页面:

https://github.com/SignalR/SignalR/commit/cc5b002a5140e2d60184de42554a8737981c846c

通常使用Git,提交是在先前代码库之上应用的一组更改,因此,请考虑以下树:

enter image description here

查看1ca1b6b的差异将在左边显示ca2cac9的代码库,并在右边显示该提交中的更改。通过合并提交,我们在左侧看到了什么?即考虑以下树:

enter image description here

如果我们在GitHub上查看提交1e25f98,那么左侧是什么? 06f5be1?而对于一棵更复杂的树呢?还是三个分支之间的合并?它只是显示历史上最后一个共同点之间的区别吗?

2 个答案:

答案 0 :(得分:2)

Git提交实际上是快照

...因此,您需要指定两次提交才能进行比较。例如。 git diff HEAD^ HEAD。如果未指定,则第二个引用设置为HEAD。

但是可以,例如git log -p显示了有关第一父级的补丁,使事情变得更容易。 GitHub / Lab的行为也一样。

已订购父母

合并提交的第一个父级指向您在调用git merge之前站立的提交。 (你的头在哪里。)

默认情况下,始终采用第一个父母。例如HEAD^HEAD的第一父级(在第二张图像6f01964上),HEAD~2HEAD的第一父级的第一父级({{ 1}})。可以由2bb48b5覆盖,因此^<number>HEAD^2的第二父级,因此是HEAD

答案 1 :(得分:2)

petrpulc's answer从本质上讲是正确的,我对此表示反对,但是要专门针对GitHub,GitHub表现出的差异就是完全忽略了第二个父级。

您可以使用以下命令在命令行上看到相同的差异:

git log -p --no-walk --first-parent -m cc5b002a5140e2d60184de42554a8737981c846c

或更简单:

git show --first-parent cc5b002a5140e2d60184de42554a8737981c846c

(我们需要--no-walk中的git log来防止Git查看更多提交,而git show则意味着它。我们需要--first-parent使Git仅查看第一父级,对于git log,我们需要-m-c--cc来强制git log显示补丁,通常是-p即使我们使用--first-parent修剪掉剩余的父母,也会跳过显示合并的补丁。)