我有一个父项目和一个子模块(没有嵌套的子模块)。 子模块有一个新的提交(我们称之为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
仍停留在从顶部算起的第三个提交。
cd ..; git add submodule
(没有尾随斜杠,将“submodule”替换为该子模块的根文件夹的名称),然后再次检查? - VonC