如何切换至拥有不同子模块配置的Git分支?
切换含不同子模块配置分支的解决方法
正常切换流程(避免报错)
直接按以下步骤操作即可顺利切换:
- 切换到目标分支,暂不处理子模块:
git switch develop - 初始化并更新当前分支的所有子模块:
git submodule update --init --recursive
已出现报错后的修复步骤
如果已经执行了带--recurse-submodules的命令并报错,按以下步骤修复:
- 先切回主分支:
git switch main - 清理残留的无效子模块信息:
- 删除子模块的缓存记录:
git rm --cached library-b - 手动删除本地的
library-b目录(如果存在)
- 删除子模块的缓存记录:
- 重新切换到develop分支:
git switch develop - 初始化并更新子模块:
git submodule update --init --recursive
问题原因说明
使用git switch develop --recurse-submodules时,Git会尝试直接重置新分支中子模块的状态,但此时Library B的子模块仓库还未在本地初始化,找不到对应的.git/modules/library-b目录,因此报错。先切换分支再单独初始化子模块,就能让Git正确创建并拉取新子模块的仓库文件。
内容的提问来源于stack exchange,提问作者wmrrugi
相关产品推荐
相关产品推荐

