use*_*612 22 git bitbucket pull-request
我做那样的事情:
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 >
Run Code Online (Sandbox Code Playgroud)
审核更改的人正在执行以下操作:
git pull
git checkout master
git merge --squash new_feature
git push origin master
Run Code Online (Sandbox Code Playgroud)
我希望这会接受拉动请求,但是没有,我错过了什么?
我阅读了很多bitbucket的文档"使用pull请求",但这对我来说仍然不太清楚.
我可以看到所有来自new_feature
分支的提交都已应用于master
分支(通过git merge --squash
),我可以看到哪些文件已经更改,但是现在当我在bitbucket的pull-request接口上按"merge"时,我在master中有另一个提交,即合并并且这不会更改任何文件(所有更改都已由之前应用git merge --squash
)但只是将所有这些提交历史记录放入主文件中,这不是我想要的.
通过:https://confluence.atlassian.com/display/BITBUCKET/Working+with+pull+requests
手动将请求提取到本地系统
有时,在接受拉取请求之前,最好使用工作流来测试本地系统上的变更集.您可以使用任何拉取请求执行此操作.典型的工作流程是:在Bitbucket中接收拉取请求.使用传入的变更集更新本地存储库.调查和/或测试更改集.如果更改集合良好,则将其合并到本地存储库中.您可能必须解决一些冲突.然后,将本地存储库推回Bitbucket.回到Bitbucket,Pull请求在Pull requests选项卡中被标记为已接受.如果您不喜欢更改请求,则在本地放弃更改并拒绝Bitbucket上的pull请求.想法?
Ben*_*mos 14
据我了解,有两种方法可以将Bitbucket拉取请求关闭为"合并".
第一个选项绝对是最简单和最直接的选项,但它不适用于某些开发工作流程.
使第二个选项起作用的关键是您的功能分支必须位于目标分支上.Bitbucket会定期检查已手动合并的拉取请求,并在找到时自动将这些拉取请求标记为合并.注意:Atlassian不会宣传此行为.我无法找到任何支持此声明的官方文档,但至少有一个其他人看到它有效.
根据您描述的工作流程,我猜测审核并推送您的更改的人有一个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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,使Bitbucket自动关闭拉取请求的最简单方法是:
git branch --force new_feature ddddddd
git push --force origin new_feature
Run Code Online (Sandbox Code Playgroud)
这也适用于已重新定位的功能分支.
警告!记住这些事实:
在推送功能分支之前将目标分支推送到原点时,Bitbucket会首先查找新推送的功能分支上不在目标分支上的任何提交.由于新功能分支是目标分支的祖先,因此结果为空集.Bitbucket因此从pull请求的提交选项卡中删除所有提交,现在读取"没有更改".然后,由于功能分支位于目标分支的历史记录中,Bitbucket会关闭拉取请求,冻结空提交选项卡,如下所示:
奇怪的是,在这种情况下,差异保持完整.
如果上述合并选项均不适合您,则您唯一剩下的选项是:
另请参阅git-branch和git-push的文档.
Pot*_*rca 12
截至2017年1月31日,已实施一项功能,以解决无法手动关闭PR的问题.
有关详细信息,请参阅(和upvote!)@BenAmos的答案.
(为历史目的而保留)
你没有遗漏任何东西.Bitbucket合并后不会自动关闭您的拉取请求.
您必须通过选择"拒绝"选项手动关闭拉取请求.