Ben*_*Ben 12 git merge git-submodules
假设我在RepoX中有两个分支,叫做BranchA和BranchB.RepoX还有一个名为SubmoduleY的子模块.
BranchA在版本'abc'处具有SubmoduleY,BranchB在版本'def'处具有SubmoduleY.
假设我想将BranchA合并到BranchB中,但我想让BranchB的SubmoduleY指向其原始版本的'def'.我看到了几种方法:
方法1:
方法2:
与方法1相同,但不是执行步骤6,而是从第3步中重新定义并删除额外的子模块提交.
两者似乎都有令人讨厌的缺点:
方法1将两个额外的提交放入历史记录中.
方法2忘记了对子模块修订所做的任何更改,因为这些提交会被删除.因此,稍后的任何合并将不得不再次处理一些问题.
有没有更好的办法?
您可以对方法1执行变体操作,但是执行将更改引入子模块版本(在步骤6中)的提交,--amend
以便它更改合并提交中子模块的状态.换句话说,这将是:
$ git checkout b
$ git merge a
Merge made by recursive.
example.txt | 1 +
sY | 2 +-
2 files changed, 2 insertions(+), 1 deletions(-)
create mode 100644 example.txt
$ cd sY
$ git checkout def
[... you get the "detached HEAD" warning ...]
$ cd ..
$ git add sY
$ git commit --amend
Run Code Online (Sandbox Code Playgroud)
请注意,正如您在问题中所建议的那样,我并不打算在合并之前尝试避免使用不同版本的子模块.如果存在冲突,您可以选择添加子模块def
来解决它.如果没有冲突,我上面提到的步骤应该可以正常工作.