在 Bitbucket Server 中使用分支权限时解决带有合并冲突的拉取请求

Resolving pull requests with merge conflicts when using branch permissions in Bitbucket Server

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

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

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

不幸的是,这些说明与某些权限组合有点不一致,这是我们希望 fix sometime(我在 Bitbucket 上工作)。

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

当我们进入脏自动合并场景时,无论是通过分支权限还是通过自动合并冲突,使用 feature/bugfix 个分支,我们执行以下操作:

在存储库的本地克隆中:

  1. 使用 'git checkout [destination branch]' 检查目标分支。
  2. 使用最近的更改更新 master 分支 远程 'git pull origin [destination branch on remote]'.
  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. 使用 URL 在 Bitbucket 中启动新的拉取请求 响应消息。确保 select 正确的目的地 分支机构。应尽可能允许自动合并。
  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>

在 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 服务器上验证,现在拉取请求应该会自动更新。

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

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

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

谢谢,希望对您有所帮助。