根据文档man git submodule update
,如果使用--rebase
选项运行,那么它永远不会使子模块的HEAD处于分离状态。
--rebase
This option is only valid for the update command. Rebase the current branch onto the commit recorded in the superproject. If this option is given, the
submodule’s HEAD will not be detached. If a merge failure prevents this process, you will have to resolve these failures with git-rebase(1). If the key
submodule.$name.update is set to rebase, this option is implicit.
字符串
然而,在下面的一个基本示例中,它似乎没有按预期工作
$ pwd
/home/user/my_repo
$ cat .gitmodules
[submodule "my_submodule"]
path = my_submodule
url = git@git.server:user/my_submodule.git
branch = main
$ # This is a fresh clone, ensure that HEAD is detached
$ # This is an expected behavior so far
$ (cd my_submodule/ && git branch)
* (HEAD detached at f1129ce)
main
$ # Let's update submodules with --rebase command
$ # The expected behavior is that HEAD will not
$ # be detached, but rather pointing to main
$ git submodule update --remote --init --rebase
$ # Nope :-( HEAD is still detached
$ (cd my_submodule/ && git branch)
* (HEAD detached at f1129ce)
main
$ rpm -qf `which git`
git-core-2.39.1-1.fc37.x86_64
$ git --version
git version 2.39.1
型
我对文件的理解是错误的吗?有人能为我澄清一下吗?
1条答案
按热度按时间u4dcyp6a1#
将当前分支重定基到超级项目中记录的提交。如果给出了这个选项,子模块的HEAD将不会被分离。
但是在
git submodule update --remote --init --rebase
之前没有当前分支,HEAD
已经分离。所以命令并没有神奇地将其移动到分支。您应该使用(cd my_submodule/ && git checkout main)
将其移动到分支,然后使用rebase更新子模块。请参阅https://stackoverflow.com/a/55570998/7976758了解更多信息。搜索https://stackoverflow.com/search?q=%5Bgit-submodules%5D+rebase+detached+HEAD