如何在子模块中搜索 Git 提交?

How to search for a Git commit in submodules?

我有一个包含多个子模块的存储库。我有一个提交的哈希,但不知道它属于哪个子模块,我怎么能找到它的确切子模块?

运行 git show 在所有子模块中递归;隐藏错误信息,忽略错误;找到哈希时报告子模块(git show 没有 return 错误):

git submodule foreach -q --recursive 'git show -q $hash 2>/dev/null && echo $name || :'

参见docs

git submodule status 将为您提供每个子模块的当前签出提交哈希 ID 的列表。您可以解析它并找出与提交哈希对应的子模块的名称:

$ commit_id="14f4e19f1c"
$ git submodule status | awk -v commit_id="$commit_id" '[=10=] ~ commit_id {print }'

(假设您正在使用该子模块的最新提交哈希)