与子模块相关的 Git 合并方向

  • 本文关键字:Git 合并 方向 模块 git
  • 更新时间 :
  • 英文 :


我有一个主分支 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有助于完成一些管理任务。完全没有命令并不难做到。

最新更新