【问题标题】:Resolving pull requests with merge conflicts when using branch permissions in Bitbucket Server在 Bitbucket Server 中使用分支权限时解决合并冲突的拉取请求
【发布时间】:2017-02-07 02:39:00
【问题描述】:

我们已经开始在我们的团队中使用 Bitbucket Server,并希望强制使用拉取请求来将功能分支的提交提交到我们的主要集成分支。为了强制执行此操作,我们打开了分支权限功能,该功能可防止在没有对这些分支的拉取请求的情况下进行合并。这很好用,直到我们收到一个有冲突的拉取请求。

在这种情况下,指令说手动获取源分支的头部并将其合并到目标,然后将其向上推。但是,合并提交被分支权限拒绝!

是我们这里遗漏了什么,还是在使用分支权限时无法手动合并?

【问题讨论】:

    标签: bitbucket-server


    【解决方案1】:

    不幸的是,这些说明在某些权限组合中有些卡顿,我们希望 fix sometime(我在 Bitbucket 工作)。

    要解决此问题,您可以通过合并来自目标分支的更改来解决源分支上的冲突。

    【讨论】:

    • 似乎没有修复。我在其他地方看到“通用指令”在大多数情况下都有效,但这似乎很奇怪。如果我正在处理更改并与目标分支产生合并冲突,为什么典型的用例是更新目标分支而不是源? PR 的重点是审查源更改以使它们成为目标,而不是相反。
    【解决方案2】:

    当我们进入肮脏的自动合并场景时,无论是通过分支权限还是通过自动合并冲突,使用功能/错误修复分支,我们都会执行以下操作:

    在存储库的本地克隆中:

    1. 使用 'git checkout [destination branch]' 检出目标分支。
    2. 使用最新的更改更新主分支 远程与 'git pull origin [远程目标分支]'。
    3. 使用 'git checkout -b feature/[my 分支描述]'
    4. 使用 'git fetch origin 从源分支获取最新更改 [源分支]'。
    5. 使用“git merge FETCH_HEAD”将获取的更改合并到目标分支。我们使用“git fetch”而不是“git pull”来避免检查源分支并首先更新它。因此 'git merge [source branch]' 和 'git merge FETCH_HEAD' (在 'git fetch origin [source branch]' 之后)之间的区别在于后者将合并远程分支的状态,而前者合并该分支的本地状态(可能不一样,甚至可能不存在)。
    6. 现在解决冲突。
    7. 使用“git add”或“git stage”暂存更改的文件。
    8. 使用 'git commit -m [your 提交消息]'。
    9. 使用 'git push origin feature/[my 分支描述]'。
    10. 使用在 Bitbucket 中提供的 URL 启动一个新的拉取请求 响应消息。确保选择正确的目的地 分支机构。应尽可能允许自动合并继续进行。
    11. 既然您已经创建了新的拉取请求,请拒绝原始拉取请求 一。确保没有其他提交被添加到原始 PR 在您不在时自动执行。

    它在 CLI 上:

    git checkout <destination branch>
    git pull origin <destination branch on remote>
    git checkout -b feature/<my branch description>
    git fetch origin <source branch>
    git merge FETCH_HEAD
    <fix conflicts>
    git stage <changed files>
    git commit -m <my message>
    git push origin feature/<my branch description>
    <continue in bitbucket>
    

    【讨论】:

      【解决方案3】:

      在 BitBucket 服务器上,当我们在合并任何拉取请求时遇到任何冲突时,我们可以使用 git bash 工具在本地系统上解决它,然后我们可以提交并将更改推送到远程功能分支并将其合并到主分支.

      需要在我们本地系统的 git bash 工具中按顺序执行以下步骤。

      (1) 打开 git bash 工具并结帐或切换到本地功能分支。

      (2) 将主分支(比如“master”)中的最新更改拉入特性分支。

      git pull origin master
      

      (3) 如果上面的命令由于一些本地更改而失败,则使用下面的命令来存储它们,否则转到下一步。

      git stash
      

      接着是-

      git pull origin master
      

      (4) 如果发生冲突,自动合并会失败,所以我们需要手动合并。使用以下命令解决冲突。

      git mergetool
      

      默认情况下,它将显示所有可用的合并工具,并且会自动选择其中一个。 如果我们觉得我们对任何其他工具都很满意,那么我们也可以对其进行配置,git 将为我们打开该工具以解决冲突。

      (5) 冲突解决后,将更改提交到功能分支。

      git commit
      

      (6) 将更改推送到远程功能分支。

      git push
      

      在 BitBucket 服务器上验证,现在拉取请求应该会自动更新。

      再次尝试合并它;如果没有冲突,它将成功合并。

      如果它再次发生合并冲突(如果有人在我们解决本地系统上的冲突期间在主分支中提交了新更改),请再次按照上述步骤解决它们。

      如果我们按顺序执行上述步骤,我们应该能够成功解决任何冲突。

      谢谢,希望对你有帮助。

      【讨论】:

      • 这看起来很有希望解决我的问题。我应该使用“master”还是应该是我试图创建拉取请求的分支的名称?谢谢!
      • 抱歉迟到了。这些是解决任何分支冲突的标准步骤,我们只需要放置特定的目标分支。在您的情况下,您可以采用您尝试合并的分支。谢谢。
      猜你喜欢
      • 2020-12-15
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 2019-05-26
      相关资源
      最近更新 更多