如何在合并之前修复合并冲突

时间:2018-02-23 17:33:47

标签: git merge-conflict-resolution

当我尝试将feature分支合并到master时,我偶尔会遇到合并冲突。

现在显而易见的解决方案是在合并期间手动解决冲突。

但是,使用基于 pull-request 的工作流程(github,gitlab,...),这在某种程度上是次优的,因为它将所有工作放在实际负责的人身上合并分支,而不是提交者。

一个有用的解决方案是在提交PR之前将master合并到feature,修复所有冲突。 但是,我觉得这不必要地使git历史变得复杂。

所以我想知道,是否有一种(简单)方法来准备feature分支,以便它可以干净地合并到master之后这两个分支的事实分歧很大)。 理想情况下,修复可以在多次提交中完成。

2 个答案:

答案 0 :(得分:0)

如果可以覆盖feature分支,则可以在提交拉取请求之前使用rebase(或者在此期间在master上引入更改后)。

Rebase不会创建额外的"合并"承诺。它将通过创建新提交(新的SHA)来重写历史记录。您可以在git-scm.com/docs/git-rebase上详细了解相关信息。另外,请查看有关differences between merge and rebase commands

的文章

重新定位在代码审核过程中也很有用。您可以提交新的拉取请求,以便有人可以删除评论。然后,您可以通过添加fixup commits来改进代码。您的团队可以再次进行代码审查,但现在他们只能检查新引入的更改。最后,您只需rebase all fixup commits,强制推送您的分支并合并代码。

请注意,只有单独使用该分支时,此方法才可以。当其他人在同一个分支上工作时,你永远不应该改变分支的历史(和强制推送)。

答案 1 :(得分:0)

我不知道。我认为最简单的方法是将master合并到feature分支,然后再提交拉取请求(PR),如您在问题中所述。这就是feature分支可以与master完全合并的方式。我不知道它是否简单,但干净。

就个人而言,我遵循一些广泛使用且非常常见的项目结构的基本准则。首先,面向对象的项目结构以及适当的打包对于避免合并冲突是有效的。这个想法是为了减少几个人在同一个文件中工作的机会,但可以在同一个分支中一起工作。

我认为一些常见的git实践总是有用的。其中一些是经常提交,经常从主人提取并解决小合并冲突,如果有任何等。

以前很难解决项目中的所有冲突。但是,几乎每个IDE都与IDE一起提供解决冲突工具,以便我们可以直观地检查和合并那些存在冲突的代码。我认为使用常见的git实践以及标准项目结构可以大大减少合并冲突。除此之外,将master合并到feature分支是在提交拉取请求之前使事情正确的干净方法。