克隆含submodule的父仓库后无法切换到子模块已有分支如何解决?
问题原因
- Git递归拉取子模块时,默认仅检出父仓库记录的子模块对应commit,子模块处于分离HEAD状态,且只会拉取与当前检出commit关联的最小引用集,不会自动拉取子模块远端的全部分支引用。
- 递归初始化的子模块默认fetch规则仅匹配当前绑定的分支引用,普通执行
git pull或git fetch不会主动拉取其他远端分支。 .gitmodules中配置的branch参数仅用于子模块更新时跟踪对应分支的最新commit,不会自动触发全部分支的拉取和本地分支创建。
解决方法
- 进入对应子模块目录后,先修改远端的fetch规则,配置为拉取全部分支引用:
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
- 执行全量拉取获取所有远端分支数据:
git fetch origin
- 此时执行
git branch -a即可看到mybranch分支,执行以下命令直接创建本地跟踪分支并切换:
git checkout -t origin/mybranch
如果需要后续子模块更新时自动拉取对应配置分支的最新代码,可执行以下命令:
git submodule update --remote
内容的提问来源于stack exchange,提问作者KR29
相关产品推荐
相关产品推荐

