我们已开始在我们的团队中使用Bitbucket Server,并希望强制使用pull请求将功能分支提交到我们的主要集成分支。为了强制执行此操作,我们启用了分支权限功能,该功能可防止合并而无需对这些分支执行拉取请求。这很有效,直到我们得到一个有冲突的pull请求。
在这种情况下,指令说要手动获取源分支的头部并将其合并到目标,然后将其推送。但是,合并提交会被分支权限拒绝!
我们在这里遗漏了什么,或者在使用分支权限时是否无法手动合并?
答案 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分支,我们都会执行以下操作:
在存储库的本地克隆中:
这是在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服务器上验证,现在拉取请求应该会自动更新。
再次尝试将其合并;如果没有冲突,它将成功合并。
如果再次发生合并冲突(如果在解决本地系统上的冲突期间有人对主分支进行了新更改),则再次按照上述步骤解决。
如果我们按顺序执行上述步骤,我们应该能够成功解决任何冲突。
谢谢,希望对您有所帮助。