更改现有子模块的分支

Changing an existing submodule's branch

当我最初添加我的子模块时,我指定了一个特定的分支,如 .gitmodule 文件中所示:

[submodule "externals/grpc/grpc"]
    path = externals/grpc/grpc
    url = git@github.com:me/grpc.git
    branch = release-1.0

我想更改到我的子模块的主分支,所以我将 .gitmodules 中的分支从 release-1.0 更改为 master,为了更好的措施,只是删除了子模块来自我的 parent git 树:

cd $submodules
rm -rf grpc
cd $gitroot
git submodule sync
git submodule update --init --recursive

现在,当我回到我的子模块时,它仍然是从 release-1.0 分支上的提交中检出的,而不是最新的主提交。

我缺少哪些步骤来切换子模块的分支?

进入子模块所在的目录,git checkout正确的branch/commit。然后上一层 git addgit commit 目录。这将检查具有正确提交的子模块。

并且不要忘记在更新其他客户端后 运行 git submodule update --recursive

上面的答案 (@milgner) 对我不起作用(git 版本 2.17.0)。可能是我做错了。

以下是对我有用的:

nano .gitmodules # substitute the needed branch here
git submodule update submodule_name # update the submodule
git add .gitmodules && git commit -m 'some comment' # add and commit
git submodule status # check that changes have been applied

如果你想切换到你以前从未跟踪过的分支。

更改 .gitmodules 中的分支后,执行以下操作:

git submodule update --init --recursive --remote
cd submodule_name
git checkout new_branch_name