如何解决分支之间的冲突

5
假设我们有一个项目 P1,由多个开发人员开发。
开发人员 D1 作为 B1 检出主干并进行了更改。 开发人员 D2 作为 B2 检出主干并进行了更改。
D1 将 B1 更改合并到了主干。现在,D2 创建了一个拉取请求,想要合并主干,但是存在冲突。
使用 GitHub 的“解决冲突”屏幕可以在合并过程中解决此冲突。
然而,D2 被要求在 B2 分支内解决冲突,然后创建拉取请求。D2 应该如何做?这种方式是否正确,或者冲突应该在合并过程中解决?
谢谢。

1
可能是如何解决Git中的合并冲突的重复问题。 - evolutionxbox
2个回答

0
git checkout master
git pull
git checkout D2
git merge master
# Here are conflicts. Resolve conflicts and do git add on the conflicted files.
git commit
git push

现在你可以进行合并请求了。

思考的方式是这样的。你从主分支开始创建了D2,然后将D1集成到主分支中。为了使所有内容都能够集成,你需要将D2中的更改与主分支合并,但如果你将当前的主分支(其中包含D1)与你自己的分支(D2)合并,则会产生相同的结果。在解决了分支中的所有冲突之后,你就有了一个版本,其中包含主分支(不包括D1和D2)、D1和D2,但是D2和主分支之间唯一的区别就是D2中所做的更改(现在包括解决冲突——这些也是更改)。因此,为了使主分支与你的D2完全相同,你只需将D2合并到主分支中,因为所有更改和冲突都已经被考虑在内。这有意义吗?


0

是的,实际上 b1 和 b2 共享相同的历史记录(即主分支)。b1 被合并回主分支,因此 b1 现在已经完成了主分支的更新(这是下面图表中的 +)。

现在轮到分支 b2 想要合并到主分支(或推送),但为了确保合并顺利进行,首先需要将 b2 合并(或拉取)最新版本的主分支。因此你会遇到冲突 - 你需要解决它们,可能需要重新测试一切,然后将合并提交到你的 b2 分支。

现在 b2 已经准备好合并到主分支了 - 这将是一个“快进”合并,意味着主分支将直接移动到你的最新提交,因为它知道你已经完成了所有工作。

糟糕的图表:

           ---b2-------merge----
          /             /       \
master -------------+---------ff-merge--
          \         |
           ---b1---/

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