Git 子模块分离头状态

4 git git-submodules git-detached-head

我在项目中添加了 2 个子模块,subA 和 subB,位于 externals/subA 和 externals/subB 中。

今天,另一位团队成员提交了他的代码,当它被拉取时,在git statusexternals/subA 和 externals/subB 中使用时,subA 和 subB 都显示分离头状态。

我先做了git submodule update,没有报告任何错误。我一次又一次地尝试,git submodule initgit submodule update它没有改变。

我们如何才能使子模块恢复同步?子模块出现这种情况的原因是什么?自我们开始以来,这是第一次出现问题。谢谢。

Von*_*onC 5

根据定义,子模块在分离的 HEAD 中签出:它表示在父存储库索引中记录为gitlink的特定 SHA1 。

请参阅“ git submodule update”以确保子模块正在跟踪分支:

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 
# or (with rebase)
git submodule update --rebase --remote
Run Code Online (Sandbox Code Playgroud)

注意:如此处所示,任何git submodule update命令都会自动分离 HEAD,即使子模块配置为遵循分支也是如此。

作为测试添加git config submodule.<name>.update合并,因为默认情况下,更新会检查提交(分离的 HEAD)


user859375在评论中添加:

当运行命令“”时,git 子模块在 init 阶段本身被分离git submodule update --init --recursive

我了解 git 引用并签出 gitsubmodules 的特定提交。

因此,我们创建了一个脚本来运行“ git submodule foreach git checkout master”和“ git submodule foreach git pull origin master”等。

这样,我们就可以在本地计算机中设置存储库时保持附加的头状态。
是的,git submodule update --remote --merge当我们需要更新子模块以反映远程更改时,我们运行“”。