【问题标题】:How to resolve merge conflict during pull request?如何解决拉取请求期间的合并冲突?
【发布时间】:2018-01-30 20:12:09
【问题描述】:

我们通常有单独的 master 分支。例如,我们有一个名为“JohnMaster”的分支。 John 在 JohnMaster 本地进行开发,当他准备好将他的代码推送到 master 时,他将他的分支推送到远程,然后从 JohnMaster 向 master 发出拉取请求。遇到的问题是我们在执行拉取请求时有冲突。

我认为我们可以解决合并冲突的方法是关闭 master 并从 master->JohnMaster 在本地执行 rebase,然后在 rebase 期间解决合并冲突。在执行 rebase 之后,它不会让我将我的代码推回远程,因为它说我是远程的 2 次提交(在 rebase 之前它们是相同的)但是当我执行 git pull 时,我得到了另一个合并冲突。

我知道最好的做法可能是从 master-->JohnMaster(反向合并)发出拉取请求,然后在 JohnMaster 上执行git pull,然后再将提交推送到远程,但有时人们会忘记然后我们遇到了这个问题。

所以我的问题是:

  1. 为什么本地变基不起作用?
  2. 我们如何解决这个问题?

请注意,我们不能直接提交给 master。需要拉取请求的分支存在安全性。

【问题讨论】:

    标签: git tfs azure-devops pull-request


    【解决方案1】:

    简答

    将 origin/master 合并到 JohnMaster 并将其推送到其远程 (origin/JohnMaster)。现在您可以从 origin/JohnMaster 向 master 执行拉取请求,只要 master 上没有新提交(master 中的提交不包含在 JohnMaster 上),您就不会发生合并冲突

    git checkout JohnMaster
    git merge origin/master
    #solve merge conflicts
    git commit
    git push
    #pull request
    git push
    

    长答案

    如果您运行git rebase origin/master,实际发生的是添加到 JohnMaster 的提交被重写(在您的情况下为两个提交)并放在来自 master 的提交之后。例如。自创建 JohnMaster 分支以来,B 和 C 已添加到 master 中,B' 和 C' 已添加到 JohnMaster 中。变基后你会得到 A --> B --> C --> B'' --> C''。在 rebase 之前,您的功能分支上有 A --> B' --> C' 并且在推送之前您仍然在远程分支上拥有它。此时 Git 告诉你本地没有 B' 和 C',因为它们已经被重写为 B'' 和 C'',因此不同的提交。

    此时,您可以使用git push -f 强制推送您的本地重定历史记录。有了这个,你消除了远程提交 B' 和 C',你得到的和你在 origin/JohnMaster 上的本地提交一样,这是 A --> B --> C --> B'' --> C''。现在你做你的拉取请求,如果它被接受,你就是这个主分支上的提交历史。

    我个人不喜欢重写远程,已经推送的历史,我认为应该尽可能避免,但它实际上是你的一个选择。

    如果您将 origin/master 合并到 JohnMaster 中(我认为这是首选方式),您将保留所有现有提交:A --> B --> C 和 A --> B' --> C' 然后你添加一个新的合并提交 M ,两个分支再次聚集在一起。合并提交是具有两个父级的提交,在本例中为 C' 和 C。您可以安全地推送此合并提交,而无需强制推送。

    【讨论】:

    • 第一次感谢您的回复。所以让我确保我正确理解这一点。我的错误是在本地变基?如果我会在本地进行合并而不是变基,我会好吗?意识到虽然在合并期间肯定会发生合并冲突。
    • @coding4fun,我删除了我之前的评论并以更详细的方式编辑了答案
    猜你喜欢
    • 2020-12-15
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多