Azure DevOps - 拉取请求 Git “后续步骤:手动解决这些冲突并将新更改推送到源分支。”

Posted

技术标签:

【中文标题】Azure DevOps - 拉取请求 Git “后续步骤:手动解决这些冲突并将新更改推送到源分支。”【英文标题】:Azure DevOps - Pull Request Git "Next steps: Manually resolve these conflicts and push new changes to the source branch." 【发布时间】:2018-06-30 12:19:14 【问题描述】:

我创建了一个名为 dev 的分支。

我已经完成了一个拉取请求,将开发代码发送给主人,当我做这个拉取请求时它告诉我:

50 多个冲突阻止自动合并 “后续步骤:手动解决这些冲突并将新的更改推送到源分支。”

我从这里去哪里?我只想让所有的 dev 分支替换 master 中的任何内容。我看不到解决这些冲突的选项。

【问题讨论】:

我有一个“完成”按钮,但它是灰色的。 在 VSTS 环境中无法进行手动合并。您应该将 master 分支合并到您的 dev 分支中,解决冲突,提交并推送。 那么回答我的问题。那么我应该合并分支而不是执行拉取请求吗? 通过拉取请求,您可以让其他开发人员有机会审查您的代码并提供反馈。完成此审查后,您可以将代码合并到主分支中。您不应该将 dev 分支合并到本地 master 然后推送它,除非您与合作者同意这是您的流程的工作方式。解决方案是将 master 合并到您的 dev 分支中并解决冲突,正如我在之前的评论中指出的那样。 我没有权限从本地机器推送到 master,只能审查和批准拉取请求(甚至是我自己的)——这是合并到 master 的唯一方法。这里的所有解决方案都依赖于本地工作。从这里到哪里? 【参考方案1】:

我在功能分支上遇到了合并冲突。

1. switched to the development branch and I completed a pull getting the current code base
2. git pull --no-rebase origin /feature/2 
3. from team resolved the merge conflict by manually selecting code between 
the conflicting file then pressing "accept merge"

4. push the changes to the git repository
5. complete a pull request into development

【讨论】:

【参考方案2】:

您必须在 PC 上执行以下操作

在分支dev

$ git pull --no-rebase origin master - 这将创建一个合并提交,您必须解决在 dev 和 master 上更改的文件中的冲突。 git status 将显示具有冲突更改的文件列表。

解决冲突后,提交所有更改并推送您的分支。之后你应该就可以完成 PR了。

仅供参考:--no-rebase 确保合并完成,即使拉取行为被覆盖为默认变基。

Help link for more details

【讨论】:

更好的文档链接 - 以下是 Azure DevOps 文档“解决合并冲突”的链接,该文档提供了关于什么是合并冲突的说明以及有关如何处理的说明使用命令行或 Visual Studio 解决。 docs.microsoft.com/en-us/azure/devops/repos/git/…【参考方案3】:

我必须做一个rebase。必须遍历所有提交并应用我的更改 - 它们非常广泛,重命名命名空间和方法名称等。然后让我继续在 Azure DevOps 门户中执行Pull Request。实际上,我可以只刷新现有Pull Request 的更改,自动合并冲突就解决了。

合并代码并没有解决问题,只有rebase 有效。

【讨论】:

【参考方案4】:

由于您需要在dev 分支上保留文件版本(在目标分支master 中更改文件时保留源分支),因此您应该在master 分支上进行更改以解决冲突文件,并且确保您有权将更改推送到 master 分支。

您可以使用以下选项:

方案一:直接合并

在您的本地仓库中,您可以执行以下命令将dev 合并到master 分支,同时将冲突文件版本保留为dev 分支:

git checkout master
git merge dev -X theirs
git push origin master

并且在您创建的现有拉取请求中,它会显示分支已合并。所以你可以放弃拉取请求。

选项 2:仍然通过拉取请求合并(解决 master 分支上的冲突)

您可以使用以下命令解决master 分支中的冲突:

# In yout local repo
git checkout master
git checkout dev -- .
git commit -m 'replace master branch version by dev for the conflict files'
git push origin master 

如果新提交推送到目标分支(主分支),现有拉取请求中的更改将不会更新。你可以找到类似的报告Pull request diff does not update when a commit from the PR is merged to the target via another branch。

也就是说,网页中的拉取请求仍然显示冲突。您应该放弃现有的拉取请求并重新激活(或创建一个新的)以将 dev 合并到 master 分支。

【讨论】:

我尝试选项 2,并得到“不允许推送到此分支;您必须使用拉取请求来更新此分支。” 推送到master 是一个糟糕的建议。没有理由推动 master 来保留您的更改。你的所有提交都在 dev 分支上。

以上是关于Azure DevOps - 拉取请求 Git “后续步骤:手动解决这些冲突并将新更改推送到源分支。”的主要内容,如果未能解决你的问题,请参考以下文章

Azure DevOps GIT(gitflow)如何在开发分支上强制执行拉取请求以保持源最新?

是否可以限制谁可以在 Azure DevOps 中完成拉取请求?

如何在Azure DevOps中向管道中的远程分支发出拉取请求?

如何在 Azure DevOps 中自动触发构建拉取请求?

Azure 拉取请求 | Azure Devops - “您必须在 '+' 运算符之后提供值表达式。”

如何在 Azure DevOps 的拉取请求中显示构建状态