如何解决 VSTS 中拉请求中的合并冲突?

我已经创建了拉请求,我得到了这个:

enter image description here

“批准”按钮不执行任何操作,“完成”被禁用。

如何在请求中解决这个冲突?

102018 次浏览

更新

微软刚刚添加了基于浏览器的合并。这可能会让你摆脱小冲突的困境。

并提供 Sprint 150改进了不同场景的可视化

对于更复杂的情况:

您有两个选择来解决冲突,从目标分支反向集成更改(这将创建额外的合并提交) ,或者重新基于目标分支(这将使您的历史记录变得干净漂亮)。


在完成公关之前将目标分支合并到当前分支。

您需要在本地克隆回购,从目标分支到您的分支执行合并,并将这些更改推送到存储库。VSTS 将检测更改并更新请求。

            -------o3              PR
/
---------o1-o2                     target

因此,将 target (o2)合并到 PR:

            -------o3-o4           PR
/          /
---------o1----------o2            target

然后完成公关

            -------o3-o4           PR
/          / \
---------o1----------o2--o5        target

调整 PR 分支的基础,以包括目标的最新变化

或者,您可以在本地克隆回购,将 PR 分支基于目标分支的最新版本,解决来自 rebase 的所有问题,并强制将更改推回 PR 分支。VSTS 将检测更改并更新请求。

            -------o3              PR
/
---------o1-o2                     target

因此,将 o3重新定位到 o2:

              -------o3            PR
/
---------o1-o2                     target

然后完成 PR(在下面的例子中使用快进合并) :

---------o1-o2-o3                  target

您可以通过@jessiehouwing 或使用新的插件来实现上述技术。MicrosoftDevLabs 发布了插件的链接来解决冲突。下面给出了插件的链接 Https://marketplace.visualstudio.com/items?itemname=ms-devlabs.conflicts-tab

  1. 使用 VisualStudio 打开项目。
  2. 打开 观景 > 探险队
  3. 切换到 树枝选项卡。
  4. 双击要合并的分支(例如 dev)。
  5. 右击 > Merge From > Select < br/> Merge From Branch: 师父,
    进入当前分支: < strong > dev
  6. 单击 合并按钮
  7. 选择冲突文件
  8. 然后解决冲突。您可以单击左或右复选框 要包含的部分的。
  9. 然后提交合并
  10. 成交。

为了回答@metuddy 的问题:

然后呢?这只说明了如何在本地解决冲突,我不能将目标或源分支直接推送到 VSTS,因为我有分支策略,需要从特性分支发出请求。

您可以按照上面的步骤操作,只是源分支和目标分支略有不同。

  1. 分支合并来自: 师父
  2. 分行进入: 你的特色分支
  3. 创建从 你的特色分支合并到 师父的拉请求

这个问题的答案是参考了@metuddy 对@sky91的回答的评论

如果您在“ master”和“ master”分支上的目标分支应用了不接受直接合并的策略,该怎么办?

注意: 假设‘ master’是目标分支,‘ x001’是 pull 请求中的源分支,它在‘ master’和‘ x001’分支之间存在冲突。

在这种情况下,@sky91的解决方案是行不通的。

  1. 从 target (‘ master’)分支创建一个新分支,如‘ x002’
  2. 转到视觉工作室,选择“ x002”
  3. 从‘ x001’分支合并‘ x002’。
  4. 转到 pull 请求并将目标分支更改为‘ x002’
  5. 它将显示与拉请求中相同的冲突。
  6. 解决所有冲突并提交合并。
  7. 刷新“请求”页面时,它将显示“更改已经合并”
  8. 它必须显示“关闭”按钮。如果它在那里,然后关闭这个拉请求。
  9. 现在所有的更改都已合并并保存到‘ x002’
  10. 创建一个从“ x002”到“ master”的新 pull 请求
  11. 因为所有的冲突都消失了,它将允许合并到“ master”分支中。

经过一些失败的尝试,我找到了工程解决方案,基于@Sailesh 在 将开发分支与 master 合并问题的答案:

从将 master合并到 development开始,这样如果有任何冲突,您可以在 development分支本身中解决

(on branch development)$ git merge master

在此之后,你可以 complete的拉请求在相反的方向没有问题