如何解决分支之间的冲突

时间:2019-02-06 19:11:00

标签: git github

假设我们有一个由多个开发人员开发的项目P1。

开发人员D1将母版签出为B1并进行了更改。 开发人员D2将母版签出为B2并进行了更改。

合并的D1 B1更改为主服务器。现在,D2创建了一个拉取请求,想要合并主服务器,但是存在冲突。

可以在合并过程中使用github的“解决冲突”屏幕解决此冲突。

但是,要求D2解决B2分支内的冲突,然后创建拉取请求。 D2怎么做?是在合并过程中应该采取的方式还是解决冲突?

谢谢。

2 个答案:

答案 0 :(得分: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集成到master中。为了集成所有内容,您必须将D2中的更改合并到master中,但是如果将当前的master(其中包含D1)合并到自己的分支(D2)中,则相同的操作将产生相同的结果。解决分支中的所有冲突之后,您将拥有一个包含主版本(不包含D1和D2),D1和D2的版本,但是D2和主版本之间的唯一区别只是D2中所做的更改(现在包括解决冲突) -这些也是变化)。因此,为了使master像您的D2一样,您可以将D2合并到master中,因为考虑了所有更改和冲突。这有道理吗?

答案 1 :(得分:0)

是的,实际上b1和b2共享相同的历史记录(即master)。 b1合并回master,所以b1现在完成,master更新了(即下图中的+

现在,它的分支b2想要在master上进行合并(或推送),但是要确保合并顺利进行,b2需要合并(或拉出)最新版本的master。因此,您有冲突-您需要解决它们,也许需要重新测试所有内容,然后将合并提交到您的b2分支上。

现在b2已准备好合并到master中-这将是一个“快速转发”合并,这意味着master实际上将被移至您的最新提交,因为它知道您已经完成了所有工作。

胡扯图:

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