如何在合并前解决合并冲突

how to fix merge conflicts before merging

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

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

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

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

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

feature 分支可以被覆盖时,您可以在提交拉取请求之前使用 rebase(或者同时在 master 上引入重大更改之后)。

Rebase 不会创建额外的 "merge" 提交。它将通过创建新的提交(新的 SHA)来 re-write 历史。您可以在 git-scm.com/docs/git-rebase. Also, take a look at the article about differences between merge and rebase commands.

上阅读更多相关信息

Rebase 在代码审查过程中也很有用。您可以提交新的拉取请求,以便其他人可以发表评论。然后你可以通过添加 fixup commits. Your team can make another iteration of the code review but now they are able to check only newly introduced changes. In the end, you just rebase all fixup commits 来改进代码,强制推送你的分支并合并代码。

请注意,仅当您单独处理该分支时,此方法才可行。当有其他人在同一分支上工作时,您永远不应该更改分支的历史记录(和强制推送)。

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

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

我认为一些常见的 git 做法总是有帮助的。其中一些经常提交,经常从 master 拉取并解决小的合并冲突(如果有的话)等。

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