【问题标题】:Can't resolve git conflicts due to policy using Azure DevOps由于使用 Azure DevOps 的策略,无法解决 git 冲突
【发布时间】:2019-11-19 10:17:08
【问题描述】:

所以我有一个 master 分支和一个 development 分支;它们都被锁定,因此只能通过拉取请求对分支进行更改。我想将开发中的一些更改合并到服务器上的 master 中,我为此创建了一个拉取请求。但是存在冲突,所以我在本地手动进行了合并并尝试将更改推送到服务器。由于需要拉取请求的政策,我不能这样做!有没有其他方法可以在不违反政策的情况下解决冲突?我现在能想到的就是放弃拉取请求并创建一个新请求,但我不确定这是否能满足我的需要——没有本地人就无法真正解决我所知道的冲突合并,如果不推送到 master ,就无法将已解决的更改放入我知道的 master 分支中,这是政策禁止的 - 帮助?

【问题讨论】:

    标签: git azure-devops


    【解决方案1】:

    如果我了解您的设置,您应该通过 PRfeature/somefeature 分支对 develop 进行更改,对吗?您使用另一个 PRdevelop 更改为 ma​​ster(按照惯例,因为分支策略不定义特定分支之间的关系)。

    将您的冲突解决方案视为“功能”

    放弃你当前的 PR,因为它在没有强力推动的情况下被破坏了。基于当前的 develop 创建一个新的 feature/ConflictResolution 分支。然后在 localhost 上拉出最新的 ma​​ster 并将它们合并 ma​​ster => feature/ConflictResolution。这应该会给您在 PR 中看到的开发和主控之间的相同冲突。解决这些冲突并推送到远程 feature/ConflictResolution 以启动新 PR 进入开发,然后进入主服务器。

    或者:通过 PR 将你的 conflictResolution 直接放入 master

    这与上一个选项基本相同,只是您要在 conflictResolution 分支和 ma​​ster 之间创建 PR。我认为这将删除您需要在 developma​​ster 之间进行 PR 的任何更改,因此现有 PR 在您告诉它重新合并后可能会“消失”。

    ULTIMATE OR:停止使用合并地狱分支策略

    您仍然想使用基于主干的策略,这很好,但要取消锁定的开发分支约定。将策略保留在 master 上,确保它是必需的,在其上添加构建验证,并称之为好。这会强制进入 master 的任何更改使用 PR 并执行 Restore >> Build >> Test 门构建。如果您有一个严格的部署创作过程,请使用标签来标记历史上的那些仪式性里程碑。

    这是good video,关于一些策略以及它们如何随着时间的推移而成熟并获得信任。

    【讨论】:

    • 我用分支“conflictResolution”尝试了你的第一个解决方案。在我将它合并到 dev 之后,我在尝试合并到 master 时仍然遇到相同的冲突。但是,我可以将冲突解决分支合并到 master。我只是想找出选项 1 不起作用的原因。任何想法将不胜感激:)
    【解决方案2】:

    创建 PR 反对开发时会引发冲突,对吗?我想您能做的最好的事情就是在开发之上将合并转换为单个修订版(如果可能的话)......然后您可以从中创建 PR。

    所以......你已经和develop合并了,对吧?

    git reset --soft develop # put all changes related to your PR into the index, ready to commit
    git commit -m "My PR changes"
    

    现在,解决所有冲突后的所有更改都在开发后的单个修订中(开发没有移动)。推送该分支(这应该会自行更新 PR 并允许您合并)。

    【讨论】:

    • 不,没有反对开发的公关;拉取请求是从开发到掌握。它被破坏了,因为我之前从一个单独的分支创建了第二个拉取请求到 master 只是为了更改版本号和一些类似的东西;我应该先完成开发的 PR,然后再完成版本号分支的 PR。
    • 然后在 master 上恢复更改并从开发中带过来,否则冲突会一直存在并且你会被卡住(如果我理解正确的话)。
    • 嗯,我认为我无权恢复对 master 的更改;我想我得和我的老板谈谈这件事,因为他负责回购!
    • 什么意思?您如何在不先进行开发的情况下将更改放在 master 中?通过公关?然后创建另一个 PR,其更改恢复 master 中破坏你的那些更改(例如,git revert the-revision-i-want-to-revert,将更改推送到分支,创建 PR,合并到 master)。
    • 除了开发到 master 之外,没有任何政策可以防止从分支中拉取请求;这只是一个约定,大多数更改将首先通过开发。我想还原提交可能会起作用!
    【解决方案3】:

    昨晚我和老板谈了这件事,他想出了办法:

    1) 拉主和开发

    2) 从 master 合并到本地开发

    3) 已解决的冲突

    4) 创建并完成拉取请求

    5) 拉动式发展

    【讨论】:

    • 哦,谢谢你提醒我——我会早点做的,但由于某种原因,直到几天后我才被允许接受我自己的答案,这让我忘记了!跨度>
    【解决方案4】:

    正确的过程是你应该将ma​​ster分支合并到你的development分支,然后提交并推送更改到development分支,然后创建将更改合并到 Master 的拉取请求。

    有一个扩展可以解决冲突在线,无需在本地进行。

    Pull Request Merge Conflict Extension

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多