通过命令:
git log SHA1 -1 -p
我正在接收有关子项目提交SHA2的信息。
有什么办法可以通过使用漂亮的格式以相同的git日志打印SHA2?
像
--format="%H | %s | %cD"
答案 0 :(得分:0)
您看到的子模块提交哈希ID是 patch 输出的一部分。没有格式指令可以获取它。该补丁显示了该补丁,因为git log -p
为您运行了git diff
。
更具体地说,存储库中的每个提交都可以通过检查提交的父级的数量来表征:
当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中,请随时使用~
。)