Git: 分阶段集体合并分支

4

我在Github上有一个主分支,还有一个特性分支,这个特性分支随着时间的推移已经发生了较大的分歧。合并不应该是不可能的,但是在一台笔记本电脑上通过git merge branch进行一次合并过于繁琐,特别是因为不同的人在某些文件的冲突修复方面更加擅长。

所以我们需要一种工作流程,逐步将分支公开迭代地改变为最终git merge将是无痛的,因为所有冲突已经逐步解决。有什么想法吗?我们不可能是第一个遇到这个问题的人,请问是否有相关文章或链接可以提供参考?

谢谢您的帮助,致敬!Steffen


将主分支合并到您的特性分支中是否不可行,因为您正在进行工作?那么您将会在此过程中遇到合并冲突,但规模较小。 - Lasse V. Karlsen
2个回答

1
你可以从主分支创建一个名为“bmerge”的新分支,专门用于该合并。
你可以开始将功能合并到bmerge中,而不是解决所有冲突,提交带有它们的合并冲突的文件并推送!
然后,您可以要求您的同事获取该bmerge分支,查找任何合并冲突标记,并根据他们对该特定部分代码的熟悉程度来解决冲突。
一旦没有更多的合并冲突,您可以在feature的顶部挑选您的同事解决方案提交,并合并到master中。

尝试过一次后,没有使用合并工具解决合并冲突比另一种方法更加困难,即从原始分支点创建一个新分支,然后逐对地选择主分支和特性分支的提交,并将其合并到这个新分支中。我们通过假装在途中已经进行了合并来重新播放了“时间”部分。合并冲突仍然会发生,但它们更小且更容易处理。 - Lasse V. Karlsen
只要(就像 https://dev59.com/fmMl5IYBdhLWcg3wyJYe#18131595 中所述),merge.conflictstyle 被设置为 diff3,任何 VSCode 在打开带有合并冲突标记的文件时仍会向您显示合并的辅助信息。 - VonC
我们没有使用VSCode,而是使用Visual Studio,在那之前还没有VSCode。 - Lasse V. Karlsen
@LasseV.Karlsen 好的,有道理。 - VonC

1
我曾经使用的一种方法是,将时间轴进行回放,并假装我们已经沿着这条路合并了。
基本上,我们有这样一个情况:
           *---*---*---*---*---*---*---*---*---*---*---*---*---*---* <-- master
          /
         /
*---*---A
         \
          \
           *---*---*---*---*---*---*---*---*---*---*---*---*---*---* <-- feature

我们首先从原始分支点(A)创建了一个新的分支,然后我们从主分支和功能分支中选择了一些提交记录,并逐对合并到新分支中。这仍然会产生合并冲突,但它们更小且更容易处理。结果类似于这样:
           *---*---*---*---*---*---*---*---*---*---*---*---*---*---*-----M <-- master
          /         \                   \                   \           /
         /           \                   \                   \         /
*---*---A-------------M-------------------M-------------------M-------M <-- (temp)
         \           /                   /                   /       /
          \         /                   /                   /       /
           *---*---*---*---*---*---*---*---*---*---*---*---*---*---* <-- (feature)

上述所有M均为合并操作,它们中的一些发生了合并冲突,不论大小。

我想我们总共有7-8个这样的合并操作,但是通过使用历史记录并选择重构和新功能添加后的稳定点,我们能够从主分支和特性分支中挑选出一些好的提交,并将它们合并在一起。


请考虑使用git imerge,它是一种自动化完成上述操作的方式。 - torek
哦,太好了,我之前不知道这个,看起来很有用,我一定会记下来以备将来参考。希望我永远不会再次陷入这种情况(好吧,说笑而已)。 - Lasse V. Karlsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接