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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在GitHub上实际显示的合并提交的差异是什么?相关的知识,希望对你有一定的参考价值。

请考虑以下提交页面:

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

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

enter image description here

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

enter image description here

如果我们在GitHub上查看提交1e25f98,左边是什么? 06f5be1?那么一棵更复杂的树怎么样?还是三个分支合并?它只是在历史的最后一个共同点之间显示出差异吗?

答案

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来修剪其余的父母。)

另一答案

实际上,Git提交是快照

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

但是,是的,例如git log -p显示关于第一个父母的补丁,以使事情变得更容易。而GitHub / Lab的行为则相同。

订购父母

并且,在调用git merge之前,合并提交的第一个父项指向您所站的提交。 (你的HEAD在哪里。)

默认情况下,始终使用第一个父级。例如,HEAD^HEAD的第一个父母(在第二张图片6f01964上),HEAD~2HEAD2bb48b5)的第一个父母的第一个父母。这可以被^<number>覆盖,所以HEAD^2HEAD的第二个父母,因此b0417C3

以上是关于在GitHub上实际显示的合并提交的差异是什么?的主要内容,如果未能解决你的问题,请参考以下文章

显示直接提交到分支的提交,忽略 Git 中的合并

如何在 GitHub Action 工作流程中推送或合并之前获取上一个提交?

如何“git show”合并提交的差异?

即使每个更改的文件都与其中一个父文件一致,如何“git show”合并差异输出的合并提交?

github上测试服出现bug,如何回滚并获得合并之前的分支

如何强制删除远程分支在GitHub上