在Bitbucket Server

时间:2016-09-28 23:06:37

标签: bitbucket-server

我们已开始在我们的团队中使用Bitbucket Server,并希望强制使用pull请求将功能分支提交到我们的主要集成分支。为了强制执行此操作,我们启用了分支权限功能,该功能可防止合并而无需对这些分支执行拉取请求。这很有效,直到我们得到一个有冲突的pull请求。

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

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

4 个答案:

答案 0 :(得分:7)

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

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

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

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

谢谢,希望它有所帮助。

答案 1 :(得分:2)

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

在存储库的本地克隆中:

  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  在你不在的时候自动。
  12. 这是在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>
    

答案 2 :(得分:1)

不幸的是,这些指令在某些权利组合中有点松散,我们希望fix sometime(我在Bitbucket工作)。

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

答案 3 :(得分:-1)

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

需要遵循以下步骤才能使用本地系统的git bash工具。

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

(2)将最新的更改从主分支(例如“ master”)拉入功能分支。

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

git隐藏 其次是-

git pull原始主机 (4)如果发生冲突,自动合并将失败,因此我们需要手动进行合并。使用以下命令解决冲突。

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

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

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

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

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

如果再次发生合并冲突(如果在解决本地系统上的冲突期间有人对主分支进行了新更改),则再次按照上述步骤解决。

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

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