假设我在 RepoX 中有两个分支,分别称为 Branch 和 Branch。 Repo 还有一个名为 Submodule 的子模块。
BranchA 具有修订版“abc”的子模块,Branch 具有修订版“def”的子模块 A。
假设我想将 BranchA 合并到 BranchB 中,但我想让 Branch 的子模块指向其原始版本“def”。我看到有几种方法可以做到这一点:
方法一:
- 结账分行。
- 将 SubmoduleY 移动到修订版“abc”以使实际合并变得轻松(我们现在不想在子模块级别进行任何合并)。
- 提交 SubmoduleY 的新修订版(我们不能让它浮动以进行合并)。
- 将分支合并到分支中。解决任何冲突。
- 将 SubmoduleY 移回修订版“def”。
- 提交 SubmoduleY 的新修订版。
- 将更改推送到主存储库。
方法二:
与方法 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
请注意,正如您在问题中所建议的那样,我并没有在合并之前尝试避免子模块处于不同版本。如果存在冲突,您可以选择将子模块添加到def
来解决它。如果没有冲突,我上面提到的步骤应该可以正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)