首页 > 解决方案 > Git submdule - 改变银行

问题描述

我对 git 中的子模块有疑问:

我有一个带有子模块“A”的存储库“SuperRepo”。子模块“A”指向.gitmodules 中的分支“develop”。如果我在“SuperRepo”中创建一个新分支,假设“fancyFeature”,我有时会将子模块“A”的分支更改为具有相同名称的新分支。情况并非总是如此,但有时。

我可以提交此更改,并且子模块指向分支“fancyFeature”上的提交。但是由于 .gitmodules 仍然指向开发,所以我总是有独立的头脑(至少这是我的解释)。有没有办法在没有分离头的情况下更改子回购的分支?

谢谢你的帮助!

PS:如果我将 .gitmodules 更改为“fancyFeature”,我不会感到头晕目眩。这就是我的结论的来源...

标签: gitgit-branchgit-submodules

解决方案


git 子模块默认使用分离的 HEAD,并且没有直接支持来改变它。

但是你可以:

  • submodule.XXX.branch(在 `.gitmodules 中)设置为分支

  • 去这个分支的头

    git submodule update
    

    默认情况下,此命令暗示--checkout

  • 手动创建分支并使用

    git submodule update --rebase
    git submodule update --merge
    

    这将保留您的分支。

submodule.XXX.update您可以通过设置为rebasemerge或来覆盖默认更新方法checkout

您可以添加--remote以获取子模块分支并合并/重新设置/签出此提交。

要创建分支,您可以遍历子模块,例如

git submodule foreach 'git -B feature-branch || :`

推荐阅读