如何在Git主仓库执行git log时显示提交中修改的子模块?
如何在Git主仓库的
git log中查看子模块的修改 当然可以显示!你之前可能是对--submodule选项的用法或者和--pretty的组合方式没摸透,我来给你拆解正确的操作方式:
1. 最直接的子模块变更摘要
如果你只想快速看到每次主仓库提交里涉及的子模块变更(比如子模块从哪个提交哈希切换到了哪个),直接用:
git log --submodule
这个命令会在每个提交的详细信息下方,追加一段Submodule changes的小节,列出所有被修改的子模块路径、新旧哈希差异,以及变更的提交数量。
2. 查看子模块的详细提交日志
如果想要更深入,连子模块内部的提交信息也一并显示在主仓库的日志里,用--submodule=log参数:
git log --submodule=log
它会在主仓库提交信息下面,嵌套展示对应子模块中发生的具体提交(包括提交哈希、作者、提交信息),相当于把主仓库和子模块的日志关联起来看。
3. 结合自定义--pretty格式显示子模块信息
如果你想用自定义的日志格式(比如只显示提交哈希、标题和子模块变更),需要在--pretty的格式字符串中加入子模块相关的占位符:
%gs:子模块变更的摘要信息%gH:子模块更新后的目标提交哈希%gD:子模块更新后的目标引用(比如分支名)
举个例子,自定义格式可以这么写:
git log --pretty=format:"%h | %s | 子模块变更:%gs"
这样每条日志行都会直接显示子模块的变更摘要,不用额外展开。
可能你之前踩的坑
- 如果你用了自定义
--pretty格式但没加子模块占位符,--submodule的效果不会自动体现,因为自定义格式会覆盖默认的日志输出结构,必须主动加入子模块相关字段。 - 注意
--submodule的可选取值只有short、log、summary三种,要是用了其他无效值,自然不会生效。
可选:设置默认显示子模块日志
如果不想每次都敲--submodule,可以把它设为默认配置:
git config log.submodule log
之后直接执行git log就会自动包含子模块的详细日志了。
内容的提问来源于stack exchange,提问作者romaric crailox
相关产品推荐
相关产品推荐

