我有一个带有子模块的父项目(没有嵌套的子模块)。子模块有一个新提交(我们将其称为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 update
和git 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
仍位于顶部的第三次提交。
答案 0 :(得分:0)
您需要确保新提交已推送到子模块远程存储库。 (.gitmodules
URL line中列出的那个)
然后,您需要在主父回购本地克隆中执行git status,以检查它是否最晚位于master
分支和git ls-tree
does show the right submodule root tree commit分支。