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 的任何差异,但添加 -m
到 git 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。
当我 运行 在 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 的任何差异,但添加 -m
到 git 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。