我的问题
我做过这样的事:
git clone
git checkout -b new_feature
< work and commit >
git rebase master
< work and commit >
< finish working >
git rebase master
git push origin new_feature
< I create pull request via bitbucket's web interface >
审查更改的人正在做以下工作:
git pull
git checkout master
git merge --squash new_feature
git push origin master
我希望这将关闭拉的请求,因为接受了,但它没有,我错过了什么?
一些背景资料
我读了很多bitbucket的文档“处理拉请求”,但这一点对我来说还不清楚。
我可以看到来自new_feature
分支的所有提交都已应用于master
分支(通过git merge --squash
),并且我可以看到哪些文件已经更改,但是现在当我在bitbucket的拉请求接口上按下" merge“时,我在主服务器中有另一个提交,即合并,这不会改变任何文件(以前的git merge --squash
已经应用了所有更改),而只是将所有这些提交历史记录导入到主服务器中,这不是我想要的。
Via:https://confluence.atlassian.com/display/BITBUCKET/Working+with+pull+requests
手动将请求拉到本地系统 有时,在接受拉请求之前在本地系统上测试更改集的工作流是个好主意。您可以使用任何拉请求来完成此操作。典型的工作流程是:在Bitbucket中接收拉请求。使用传入的变更集更新本地存储库。调查和/或测试更改集。如果更改集很好,则将其合并到本地存储库中。你可能需要解决一些冲突。然后,将本地存储库推回Bitbucket。回到Bitbucket上,在“拉请求”选项卡中将“拉请求”标记为“接受”。如果不喜欢更改请求,则在本地放弃更改,并拒绝Bitbucket上的拉请求。想法?
发布于 2015-12-16 23:04:18
据我所知,有两种方法可以将Bitbucket拉请求关闭为“合并”。
第一种选择无疑是最简单和最直接的,但它在某些开发工作流中不能很好地工作。
使第二个选项工作的关键是您的功能分支必须位于目标分支上。Bitbucket定期检查已手动合并的拉请求,并在找到时自动将这些拉请求标记为已合并。注:亚特兰西安没有为这种行为做广告。我没有找到任何官方文件支持这一说法,但至少还有一个人在那里https://stackoverflow.com/questions/31135212/git-flow-with-bitbucket-pull-requests。
根据您描述的工作流程,我猜查看和推动您的更改的人有一个git历史记录,如下所示:
* ddddddd (origin/master, master) new feature, squashed
| * ccccccc (origin/new_feature, new_feature) new feature part C
| * bbbbbbb new feature part B
| * aaaaaaa new feature part A
|/
o
在这种情况下,让Bitbucket自动关闭拉请求的最简单方法是:
git branch --force new_feature ddddddd
git push --force origin new_feature
这也适用于已经重新建立的特性分支。
警告!将以下事实牢记在心:
当您在推送功能分支之前将目标分支推送到原点时,Bitbucket首先查找新推出的特性分支上没有在目标分支上的任何提交。因为新的特性分支是目标分支的祖先,所以结果是空集。因此,Bitbucket从拉请求的提交选项卡中删除所有提交,该选项卡现在读到,“没有任何更改”。然后,由于功能分支位于目标分支的历史记录中,Bitbucket关闭拉请求,冻结空提交选项卡:
奇怪的是,在这种情况下,差异保持不变。
如果上述合并选项中没有一个对您有效,则您剩下的唯一选项是:
发布于 2016-11-02 13:41:41
BitBucket服务器4.5.1修改了远程合并在拉请求中的分类方式(即拒绝或合并)。
@BenAmos上面的回答效果很好,但是如果在强制推到功能分支之前将合并提交到目标分支,BitBucket将自动关闭拉请求,并将其归类为“谢绝”。
但是,如果在将合并提交到目标分支之前强制推到特性分支,BitBucket将自动关闭拉请求并将其归类为“合并”。
在亚特兰西安:“推送后,拉请求将被拒绝,如果:没有提交到分支,并且在同一推送中未更新到分支。”
发布于 2017-04-14 10:26:27
我想,bitbucket不承认您的PR是合并的,因为git merge --squash
生成一个完全的新提交。在我们公司,当我们将git merge --squash
功能分支合并为主要分支时,我们也尝试了它们,但我们放弃了它,因为拉请求合并的方式一直存在,后来我们需要“拒绝”它们或者删除相关的远程特性分支。
我们目前正在做的是压缩所有特性分支提交为一个,并强制将其推送到一个远程特性分支。在此之后,负责合并到主服务器的人员只需在bitbucket的拉请求页面上单击"Merge“,即PR标记为”Merge“,在功能分支中引入的所有更改都压缩成一个完整的提交。
https://stackoverflow.com/questions/14727837
复制相似问题