确定哪个提交更改了子模块指针的 Git 命令是什么?

What's the Git command to determine which commit changed a submodule pointer?

我正在剖析对 git 存储库所做的一系列更改,其中一些涉及子模块。我使用 git blame 在子模块中找到相关的提交,但是有没有一种简单的方法可以找到我的主仓库中的哪个提交更改了指向该提交的子模块指针?

提示简单图:

1 <- 2 <- 3 <- 4 <- 5    (Main chain of commits)
|    |    |    |    |
1    1    1    2    2    (Submodule)

我找到了子模块 #1 更改为子模块 #2 的提交(比如说它是 9d95812e...)。我如何确定 main-commit #4 是首次使用新子模块提交的地方?

据我所知这不太可能,您最接近的是确定哪些提交添加或删除了特定的子模块指针:

git log -p -S "Subproject commit c4965b1..."

产量:

commit xyz123456
Author:
Date:

    Message

diff...
@@ -1 +1 @@
-Subproject commit 901231290321
+Subproject commit 1902u8129039

唯一的问题是 +/- 不是您正在搜索的实际字符串的一部分,因此您不能专门查找添加或删除,但使用 -p 标志将让你一目了然。

您也可以使用

git log -p -- path/to/submodule

如果您想查看子模块指针随时间的变化情况,请查看所有已更新子模块指针的提交。