【问题标题】:How to resolve merge conflict in pull request in VSTS?如何解决 VSTS 中拉取请求中的合并冲突?
【发布时间】:2017-10-11 16:13:04
【问题描述】:

我已经创建了拉取请求,我进入了这个:

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

如何解决拉取请求中的这种冲突?

【问题讨论】:

    标签: git azure-devops pull-request merge-conflict-resolution


    【解决方案1】:

    更新

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

    并提供improved visualizations of the different scenarios as of Sprint 150

    对于更复杂的情况:

    您有两个选项来解决冲突,从目标分支反向集成更改(这会创建额外的合并提交),或者基于目标分支(这样可以让您的历史保持干净整洁)。


    在完成 PR 之前从目标合并到当前分支。

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

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

    因此将target (o2) 合并到PR

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

    然后完成PR

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

    重新定位 PR 分支以包含目标的最新更改

    或者,您可以在本地克隆 repo,在目标分支的最新版本上 rebase PR 分支,解决 rebase 中的所有问题并将更改强制推送回 PR 分支。 VSTS 将检测更改并更新拉取请求。

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

    因此将o3 重新设置为o2

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

    然后完成PR(在下面的情况下使用Fast-forward合并):

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

    【讨论】:

    • 从哪里启动基于浏览器的合并?完成按钮被禁用。
    【解决方案2】:
    1. 使用 Visual Studio 打开您的项目。
    2. 打开查看 > 团队资源管理器
    3. 切换到分支标签。
    4. 双击要合并的分支(例如 dev)。
    5. 右键单击>合并自>选择
      从分支合并:ma​​ster
      进入当前分支:dev
    6. 点击合并按钮
    7. 选择冲突文件
    8. 然后解决冲突。您可以单击左侧或右侧的复选框 对于您要包含的部分。
    9. 然后提交合并
    10. 完成。

    回答@metabuddy 的问题:

    然后呢?这仅显示如何在本地解决冲突,我无法将目标分支或源分支直接推送到 VSTS,因为我的分支策略需要从功能分支发出拉取请求。

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

    1. 分支合并自:ma​​ster
    2. 分支到:your-feature-branch
    3. 创建拉取请求以从 your-feature-branch 合并到 ma​​ster

    【讨论】:

    • 然后呢?这仅显示如何在本地解决冲突,我无法将目标分支或源分支直接推送到 VSTS,因为我的分支策略需要从功能分支发出拉取请求。
    • @metabuddy:假设此答案的作者,您正在将 dev 合并到 master。如果你有从特性分支拉取请求到开发,你可以在本地合并开发到你的特性分支,解决冲突并推送特性分支。
    • 如果我从 my-feature-branch 向 master 发出拉取请求(合并冲突后),我无法继续,因为两个分支之间没有区别。这不知何故使 PR 过时了。
    • 对于 VS 2019,导航略有不同。选择dev 分支后,右键单击Master 并从上下文菜单中选择Merge into Current Branch 选项。
    【解决方案3】:

    您可以通过@jessiehouwing 执行上述技术或使用新插件。 MicrosoftDevLabs 发布了该插件的链接以解决冲突。插件链接如下 https://marketplace.visualstudio.com/items?itemName=ms-devlabs.conflicts-tab

    【讨论】:

    • 按照链接中的步骤并进入“接受合并”阶段后,我没有看到任何合并提交。我如何才能在这一点上继续发展?合并 PR 是我目前唯一的选择吗?
    【解决方案4】:

    此答案参考@metabuddy 对@sky91 答案的评论

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

    注意:考虑'master'是目标分支,'x001'是拉取请求中的源分支,'master'和'x001'分支之间存在冲突。

    在这种情况下,@sky91 的解决方案将不起作用。为此,您需要按照以下步骤操作。

    1. 从目标('master')分支创建一个新分支,例如'x002'
    2. 转到 Visual Studio,然后选择“x002”
    3. 从“x001”分支合并“x002”。
    4. 转到您的拉取请求并将目标分支更改为“x002”
    5. 它将显示与拉取请求中相同的冲突。
    6. 解决所有冲突并提交合并。
    7. 刷新拉取请求页面时,会显示“更改已合并”
    8. 它必须显示“关闭”按钮。如果存在,则关闭此拉取请求。
    9. 现在您的所有更改都已合并并保存到“x002”
    10. 创建一个从“x002”到“master”的新拉取请求
    11. 因为所有的冲突都消失了,它允许合并到'master'分支。

    【讨论】:

    • 为什么不直接将master合并到x001中,以解决冲突?
    • 在某些时候,这对我来说是不可能的。以上是最干净的方法。
    猜你喜欢
    • 2020-12-15
    • 2018-01-30
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    相关资源
    最近更新 更多