Git日志子项目提交SHA

时间:2019-01-11 13:25:44

标签: git

通过命令:

git log SHA1 -1 -p 

我正在接收有关子项目提交SHA2的信息。

有什么办法可以通过使用漂亮的格式以相同的git日志打印SHA2?

--format="%H | %s | %cD"

1 个答案:

答案 0 :(得分:0)

您看到的子模块提交哈希ID是 patch 输出的一部分。没有格式指令可以获取它。该补丁显示了该补丁,因为git log -p为您运行了git diff

更具体地说,存储库中的每个提交都可以通过检查提交的父级的数量来表征:

  • 没有父母的提交是 root提交。恰好一次提交(通常是第一次提交)就是这种情况。
  • 有两个或更多父母的提交是合并提交
  • 其余的提交(通常是其中的大多数)是不起眼的,普通的或其他术语-没有特殊的词来形容它们。根据定义,它们此时只有一个 parent 提交。

git log向您显示提交时,如果它是这些普通的单亲提交之一,并且您启用了-p--patch,则git log运行{{1} } 为了你。此差异将此提交的父级与此提交进行比较。输出是一系列差异,每个更改的文件一个。每个差异的格式在How to read the output from git diff?的答案中都得到了很好的描述,尽管该问题及其答案没有特别讨论子模块。

当该特定提交具有一个子模块时,该子模块提交目标在该特定提交的父级和该特定提交之间更改,您将获得以下输出之一:

git diff

当然除外,diff --git a/path/to/submodule b/path/to/submodule index aaaaaaa..bbbbbb 160000 --- a/path/to/submodule +++ b/path/to/submodule @@@ -1 +1 @@ -Subproject commit aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +Subproject commit bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb aaaaaaa(及其更长的版本)将是子模块中的实际提交哈希ID。

bbbbbbb行末的160000模式是用于 gitlink 类型的 tree 对象的模式。您不需要关心这一点,但是您需要了解提交存储了 tree ,因为...

这些哈希不是主要提交对象的一部分。它们仅存储在与提交关联的 tree 中(或主树的子树)。但是,您可以使用index直接提取它们。例如,如果您要检查的提交是git rev-parse

a123456

或:

$ git log -1 -p a123456

将显示差异,但:

$ git show a123456

将打印出存储的提交$ git rev-parse a123456:path/to/submodule 的哈希ID。要查看其他路径,请检查提交的父路径中的相同路径,例如:

a123456

$ git rev-parse a123456~1:path/to/submodule 语法避免了Windows cmd.exe的问题;在任何理智的shell中,请随时使用~。)