GitHub 上实际显示的合并提交有何差异?
What is the diff of a merge commit actually showing on GitHub?
考虑以下提交页面:
https://github.com/SignalR/SignalR/commit/cc5b002a5140e2d60184de42554a8737981c846c
通常在 Git 中,一次提交是在先前代码库之上应用的一组更改,因此,考虑以下树:
查看 1ca1b6b
的差异将在左侧显示截至 ca2cac9
的代码库,在右侧显示该提交中应用的更改。通过合并提交,我们在左侧看到了什么?即考虑以下树:
如果我们在 GitHub 上查看提交 1e25f98
,左边是什么? 06f5be1
?那么更复杂的树呢?还是三个分支之间的合并?它只是显示历史上最后一个共同点之间的差异吗?
Git 提交实际上是快照
... 因此,您需要指定两个提交以进行区分。例如。 git diff HEAD^ HEAD
。如果未指定,第二个引用将设置为 HEAD。
但是是的,例如 git log -p
显示关于 的补丁首先 parent 让事情变得更容易。 GitHub/Lab 的行为是一样的。
Parents有序
并且合并提交的第一个 parent 指向您在调用 git merge
之前所处的提交。 (你的头在哪里。)
默认情况下,始终采用第一个 parent。例如HEAD^
是HEAD
的第一个parent(第二张图6f01964
),HEAD~2
是第一个[=的第一个parent HEAD
的 43=](2bb48b5
)。这可以被 ^<number>
覆盖,因此 HEAD^2
是 HEAD
的第二个 parent,因此 b0417C3
.
实质上是正确的,我赞成它,但要具体解决 GitHub,GitHub 所做的显示此差异的操作是忽略第二个 parent完全。
您可以在命令行中使用以下命令查看相同的差异:
git log -p --no-walk --first-parent -m cc5b002a5140e2d60184de42554a8737981c846c
或者,更简单:
git show --first-parent cc5b002a5140e2d60184de42554a8737981c846c
(我们需要 git log
中的 --no-walk
来防止 Git 查看更多提交,而 git show
暗示它。我们需要 --first-parent
要使 Git 只查看第一个 parent,而对于 git log
,我们需要 -m
或 -c
或 --cc
来强制 git log
来显示一个补丁,因为 -p
通常会跳过显示合并的补丁,即使我们使用 --first-parent
到 trim 离开剩余的 parents。)
考虑以下提交页面:
https://github.com/SignalR/SignalR/commit/cc5b002a5140e2d60184de42554a8737981c846c
通常在 Git 中,一次提交是在先前代码库之上应用的一组更改,因此,考虑以下树:
查看 1ca1b6b
的差异将在左侧显示截至 ca2cac9
的代码库,在右侧显示该提交中应用的更改。通过合并提交,我们在左侧看到了什么?即考虑以下树:
如果我们在 GitHub 上查看提交 1e25f98
,左边是什么? 06f5be1
?那么更复杂的树呢?还是三个分支之间的合并?它只是显示历史上最后一个共同点之间的差异吗?
Git 提交实际上是快照
... 因此,您需要指定两个提交以进行区分。例如。 git diff HEAD^ HEAD
。如果未指定,第二个引用将设置为 HEAD。
但是是的,例如 git log -p
显示关于 的补丁首先 parent 让事情变得更容易。 GitHub/Lab 的行为是一样的。
Parents有序
并且合并提交的第一个 parent 指向您在调用 git merge
之前所处的提交。 (你的头在哪里。)
默认情况下,始终采用第一个 parent。例如HEAD^
是HEAD
的第一个parent(第二张图6f01964
),HEAD~2
是第一个[=的第一个parent HEAD
的 43=](2bb48b5
)。这可以被 ^<number>
覆盖,因此 HEAD^2
是 HEAD
的第二个 parent,因此 b0417C3
.
您可以在命令行中使用以下命令查看相同的差异:
git log -p --no-walk --first-parent -m cc5b002a5140e2d60184de42554a8737981c846c
或者,更简单:
git show --first-parent cc5b002a5140e2d60184de42554a8737981c846c
(我们需要 git log
中的 --no-walk
来防止 Git 查看更多提交,而 git show
暗示它。我们需要 --first-parent
要使 Git 只查看第一个 parent,而对于 git log
,我们需要 -m
或 -c
或 --cc
来强制 git log
来显示一个补丁,因为 -p
通常会跳过显示合并的补丁,即使我们使用 --first-parent
到 trim 离开剩余的 parents。)