Git 手动关闭bitbucket';s拉动请求 我的问题

Git 手动关闭bitbucket';s拉动请求 我的问题,git,bitbucket,pull-request,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 >

我是这样做的:

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 >
我希望这将关闭拉请求作为接受,但它没有,我错过了什么

一些背景资料 我读了很多bitbucket的文档“处理拉请求”,但这对我来说仍然不清楚

我可以看到来自
new\u feature
分支的所有提交都已应用于
master
分支(通过
git merge--squash
),我可以看到哪些文件已更改,但现在当我在bitbucket的pull请求界面上按“merge”时,我在master中有另一个提交,它是merge,这不会更改任何文件(所有的更改都已经由先前的
git merge--squash应用),但只是将所有提交历史记录带到master中,这不是我想要的

通过:

手动将请求拉入本地系统

有时,使用工作流测试一个项目是一个好主意 在接受拉取请求之前,在本地系统上设置更改集。您 可以对任何拉取请求执行此操作。典型的工作流如下: 在Bitbucket中接收拉取请求。使用 传入变更集。调查和/或测试变更集。如果 更改集很好,您可以将其合并到本地存储库中 可能需要解决一些冲突。然后,您推送本地 存储库返回Bitbucket。返回Bitbucket时,拉取请求为 在拉取请求选项卡中标记为已接受。如果您不喜欢 更改请求时,您将放弃本地更改并拒绝拉取 关于比特桶的请求。想法

更新 截至2017年1月31日,解决无法手动关闭PRs的问题

有关详细信息,请参阅(和向上投票!)


原始答案 (保留作历史用途)

您没有遗漏任何内容。Bitbucket在合并后不会自动关闭拉取请求

您必须通过选择“拒绝”选项手动关闭拉取请求


据我所知,有两种方法可以将Bitbucket请求关闭为“合并”

  • 单击“合并”按钮。Bitbucket将合并您的功能分支 进入目标分支。(Bitbucket的较新版本允许您在--no ff和--squash策略之间进行选择。较旧版本隐式使用--no ff。)
  • 使用git控制台命令(或其他界面)合并功能 分支到目标分支,然后将两者都推到原点
  • 第一个选项无疑是最简单和最直接的,但它不能很好地用于某些开发工作流

    让第二个选项发挥作用的关键是,功能分支必须位于目标分支上。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
    
    在这种情况下,让Bitbucket自动关闭pull请求的最简单方法是:

    git branch --force new_feature ddddddd
    git push --force origin new_feature
    
    这也适用于已重设基础的要素分支

    警告!记住以下事实:

    • 并非所有工作流都允许此类强制推送
    • 通过拉动请求显示Bitbucket 当其功能分支发生变化时。取决于 推送分支时,可能会导致提交列表为空。 (更多信息请参见下文。)
    • 当pull请求关闭时,任何提交历史记录和差异 信息被冻结
    在推送功能分支之前,将目标分支推送到源时,Bitbucket首先查找新推送的功能分支上不在目标分支上的任何提交。由于新功能分支是目标分支的祖先,因此结果为空集。因此,Bitbucket将从通信中删除所有提交它的拉取请求选项卡现在显示为“无更改”。然后,由于功能分支位于目标分支的历史记录中,Bitbucket关闭拉取请求,冻结空的提交选项卡,如下所示:

    奇怪的是,在这种情况下,差异保持不变

    如果上述合并选项均不适用于您,则您唯一剩下的选项是:

    • 拒绝拉取请求
    • 考虑将您的工作流程更改为更轻松的Bitbucket 支持
    • 使用Bitbucket/Atlassian

    另请参阅和的文档。

    BitBucket Server 4.5.1修改了远程合并在请求中的分类方式(即拒绝或合并)

    @上面BenAmos的回答很好,但如果在强制推到功能分支之前将合并提交推到目标分支,BitBucket将自动关闭拉请求并将其分类为“已拒绝”

    但是,如果在将合并提交推送到目标分支之前强制推送到功能分支上,BitBucket将自动关闭拉请求并将其分类为“合并”

    来自大西洋: “推送后,现在将拒绝拉送请求,前提是:在“发件人”分支上没有不在“收件人”分支上的提交,并且“收件人”分支未在同一推送中更新”


    参考资料:

    我想,bitbucket不会将您的PR识别为已合并,因为
    git merge--squash
    生成了一个全新的提交。在我们公司,我们也尝试了
    git merge--squash
    功能分支,当它们合并到主分支时,但放弃了它,因为以这种方式合并的拉请求一直挂起然后,我们需要“拒绝”它们或删除相关的远程功能分支
    git branch --force new_feature ddddddd
    git push --force origin new_feature