繁体   English   中英

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

[英]What is the diff of a merge commit actually showing on GitHub?

考虑以下提交页面:

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

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

在此处输入图片说明

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

在此处输入图片说明

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

实际上,Git提交是快照

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

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

父母被命令

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

默认情况下,始终采用第一个父母。 例如HEAD^是的第一个亲本HEAD (第二图像上6f01964 ), HEAD~2是第一个亲本的所述第一个亲本HEAD2bb48b5 )。 这可以通过重写^<number>所以HEAD^2是的第二个亲本HEAD ,从而b0417C3

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

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

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

或者,更简单:

git show --first-parent cc5b002a5140e2d60184de42554a8737981c846c

(我们需要在git log使用--no-walk来防止Git查看更多的提交,而git show则需--first-parent 。我们需要--first-parent使Git仅查看第一个父对象,对于git log ,我们需要-m-c--cc来强制git log显示补丁,因为-p通常会跳过显示要合并的补丁,即使我们使用--first-parent来修剪剩余的父对象。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM