git 日志结果与 git.api 结果不同

git log results are different than git.api results

当我 运行 在 git 上执行命令“git log -m --name-only”时。我想出了 2 个具有相同 commit-sha 的结果。

当我对同一个提交使用 Github API 时,结果是这样的;

为什么我在 git 上得到具有相同提交 sha(来自 e327....)的第二个结果?第二个结果是什么意思?

这里更重要的问题是为什么您会期望这些是相同的。

请记住,git log 是一种查询现实的方法——询问 Git 数据库中的内容——通过制定一些特定的问题集并获得答案。同时,GitHub的API也是通过问具体问题得到具体答案来查询现实的方法,只是GitHubAPI的问题不同。它们最多 一些你可以用 git log 提出的问题相关。因为你问不同的问题,你会得到不同的答案,你应该预料到这一点。如果您要与您的 SO 或配偶约会,您可能不会期望得到 相同 的回答“我们什么时候约会”和“什么颜色的衣服会”我们约会时穿的。

在任何情况下,git log -m 明确指示 git log 命令 将合并提交 拆分为两个或多个虚拟提交。根据定义,实际的合并提交有 2 个或更多 parents。如果合并提交有两个 parents,git log -m 使 git log 显示 合并提交两次,每个显示都被处理为 single-parent 仅提交这两个 parent 之一。

这样做的原因是因为 git log 可以显示提交与其(单个)parent 的 差异 git log 命令 显示合并提交与其多个 parents,1 的任何差异,但添加 -mgit log 让它假装合并提交 M,与两个 parents P1 和 P2,真的是提交 M-from-P1,与 parent P1,和 M-from-P2,以及 parent P2。这将启用其 diff-showing 代码。

您调用的 GitHub API 不会以与 git log 命令相同的方式显示差异,因此没有任何理由与-m 选项。相反,它似乎使用 combined-diff 代码(参见脚注 1)或其某些变体。


1git log命令也可以用来生成组合差异。组合差异与两个单独的差异有很大不同。选项是 -c--cc;两者产生的输出有些不同。有关详细信息,请参阅 the Git documentation