假设我在RepoX中有两个分支,分别为BranchA和BranchB。 RepoX还有一个名为SubmoduleY的子模块。
BranchA将SubmoduleY设置为版本“abc”,而BranchB将SubmoduleY设置为版本“def”。
假设我想将BranchA合并到BranchB中,但是我想让BranchB的SubmoduleY指向其原始版本“def”。 我看到了一些方法:
方法1:
1.检出BranchB。 2.将SubmoduleY移动到版本“abc”,以使实际合并变得轻松(我们现在不想在子模块级别上进行任何合并)。 3.提交新版本的SubmoduleY(我们不能让它漂浮以进行合并)。 4.将BranchA合并到BranchB中。解决任何冲突。 5.将SubmoduleY移回版本“def”。 6.提交新版本的SubmoduleY。 7.将更改推送到主存储库。
方法2:与方法1相同,但是在执行第6步时,使用变基并消除第3步中的额外子模块提交。
这两种方法都具有令人恼火的缺点:
方法1会在历史记录中增加两个额外的提交。
方法2会忘记与子模块版本有关的任何更改,因为这些提交将被删除。 因此,以后的任何合并都必须再次处理一些问题。
有更好的方法吗?
BranchA将SubmoduleY设置为版本“abc”,而BranchB将SubmoduleY设置为版本“def”。
假设我想将BranchA合并到BranchB中,但是我想让BranchB的SubmoduleY指向其原始版本“def”。 我看到了一些方法:
方法1:
1.检出BranchB。 2.将SubmoduleY移动到版本“abc”,以使实际合并变得轻松(我们现在不想在子模块级别上进行任何合并)。 3.提交新版本的SubmoduleY(我们不能让它漂浮以进行合并)。 4.将BranchA合并到BranchB中。解决任何冲突。 5.将SubmoduleY移回版本“def”。 6.提交新版本的SubmoduleY。 7.将更改推送到主存储库。
方法2:与方法1相同,但是在执行第6步时,使用变基并消除第3步中的额外子模块提交。
这两种方法都具有令人恼火的缺点:
方法1会在历史记录中增加两个额外的提交。
方法2会忘记与子模块版本有关的任何更改,因为这些提交将被删除。 因此,以后的任何合并都必须再次处理一些问题。
有更好的方法吗?
git merge a --no-commit
,无需进行修改。只需git add sY
并提交(因为我们在分支b
上,所以def
应该已经被检出)。 - kiciek