我有一个主分支 A 和一个主题分支 T,它们都指向子模块 S。在 A 和 T 上都做了一些工作,在 T 中完成的工作将子模块 S 提前了几个提交。
现在我希望将我的主题分支合并到 master 分支中,我发现如果我在 master 分支上运行git merge T
那么子模块指针不会因分支 T 中的更改而移动。
如果我在主题分支 T 上运行并运行git merge A
则子模块 S 现在位于主题分支 T 中向前移动的位置。
似乎您从哪个分支进行合并决定了合并采用哪个子模块位置。 这种行为是否符合预期? 关于如何防止丢失新的子模块位置的任何想法,或者您是否需要在进行合并之前位于正确的分支上?
也许git submodule
没有显示您所期望的内容。 演练:
# setup
git init t; cd t
git init subrepo
( cd subrepo; touch .gitignore; git add .; git commit -msubinit )
git submodule add ./subrepo; git add .; git commit -msubadd
# advance topic's subrepo
git checkout -b topic
( cd subrepo; touch new; git add .; git commit -mnew )
git add .; git commit -msubnew
git submodule status
(cd subrepo; git rev-parse HEAD)
git submodule status --cached
git rev-parse :subrepo
git status
git checkout master
git submodule status
(cd subrepo; git rev-parse HEAD)
git submodule status --cached
git rev-parse :subrepo
git status
git merge topic
git submodule status
(cd subrepo; git rev-parse HEAD)
git submodule status --cached
git rev-parse :subrepo
git status
git checkout -b demo master~
(cd subrepo; git rev-parse HEAD)
gimme=`git rev-parse :subrepo`
(cd subrepo; git checkout $gimme)
嵌套存储库是一个子模块,反之亦然。 git submodule
有助于完成一些管理任务。完全没有命令并不难做到。