我有一个主分支A和一个主题分支T,它们都指向一个子模块S. 在A和T上完成了一些工作,并且在T中完成的工作将子模块S提前几次提交。
现在我希望将我的主题分支合并到主分支中,我发现如果我在主分支上运行git merge T
那么子模块指针不会被分支T中的更改移动。
如果我在主题分支T上并运行git merge A
,则子模块S现在位于主题分支T中向前移动的位置。
您执行合并的分支似乎决定了合并所采用的子模块位置。这种行为是否符合预期?有关如何防止丢失新子模块位置的任何想法,或者在进行合并之前是否需要在正确的分支上?
答案 0 :(得分:1)
也许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)
嵌套repo是子模块,反之亦然。 git submodule
可以帮助完成一些管理任务。完全没有命令就不是很难。