git子模块卡在错误的提交中(“子模块更新”不起作用)

时间:2019-05-30 04:19:51

标签: git git-submodules

我有一个带有子模块的父项目(没有嵌套的子模块)。子模块有一个新提交(我们将其称为new-sha),父模块在远程存储库中引用了该提交(在Web浏览器中查看存储库时,我可以看到submodule @ new-sha)。 我已经拉出了父项目,它也指向工作目录中的正确提交,如git show输出所示:

--- a/submodule
--- b/submodule
@@ -1 +1 @@
-Subproject commit old-sha
+Subproject commit new-sha

即父项目中的最新提交已将子模块更改为new-sha。但是,git submodule updategit pull --recurse-submodules都不会更新到子模块中的new-sha,它们总是签出old-sha

为什么以及如何解决?

git版本2.21.0.windows.1

一些其他信息:子模块在本地具有sha-new,但是其HEAD停留在sha-old

sha-new是从sha-old派生而来的,这是最后3次提交,也许这可以提供一个线索:

sha-new  == the top of submodule's branch used by parent project
sha-old  == HEAD
sha-xyz  == origin/HEAD

origin/HEAD行让我担心。即使在手动拉出子模块(cd submodule; git pull origin branch-name:branch-name)之后,origin/HEAD仍位于顶部的第三次提交。

1 个答案:

答案 0 :(得分:0)

您需要确保新提交已推送到子模块远程存储库。 (.gitmodules URL line中列出的那个)

然后,您需要在主父回购本地克隆中执行git status,以检查它是否最晚位于master分支和git ls-tree does show the right submodule root tree commit分支。