在Bitbucket上撤销已合并的拉取请求

70

我已经创建了一个pull request并将其合并到了错误的分支中。如何撤销它?

据我所知,可以硬重置目标分支,但是在origin存储库中的pull request会怎样呢?

我正在使用Bitbucket,并且是通过SourceTree(打开Bitbucket页面)创建的pull request。

我有三个分支正在工作:masterdevcreate-aliascreate-aliasdev设置,devmaster设置:master -> dev -> create-alias。 问题是我从create-alias创建了一个pull request,并将其与master合并,而不是dev

我现在正在create-alias分支上工作。 create-alias上的最后一次提交是6ee20f9,而在master上合并的提交是be36f72

您能否简要写下如何逐步撤消它呢?

据我所知,步骤如下:

  1. 检出master分支。
  2. 撤消-m 1 6ee20f9
  3. 推送。
  4. 检出create-alias并继续工作。

是这样吗?

4个回答

114
很遗憾,截至目前为止,Bitbucket上没有“撤销拉取请求”功能,但是有一个功能请求存在。 注意:在继续之前,请确保您的工作副本干净,没有未提交或未推送的更改。
因此,您将不得不在Git中撤消合并。首先,找到合并提交的SHA哈希值。
在命令行上,这是:
git checkout <branch>
git pull
git log

然后,我们撤销合并提交并推送它:
git revert -m 1 <SHA-1>
git push

在 SourceTree 中,首先检出相关的分支,然后执行“Pull”操作。在日志窗口中找到合并提交,右键单击它,然后点击“复制 SHA-1 到剪贴板...”。然后转到“操作 --> 在终端中打开”。一旦终端打开,输入以下内容:
git revert -m 1 <SHA-1 (from clipboard)>
git push

很遗憾,SourceTree没有一种简单的右键撤销合并的方法,但是已经有一个功能请求存在。


有用且值得知道的。 - Jalil Nourmohammadi Khiarak

43

现在,Bitbucket 在 Pull Requests 页面上增加了“还原”按钮。

enter image description here

请注意,此操作不会自动更新最初合并 Pull Request 的分支。它将创建一个新的分支,并在其中创建一个撤销该 PR 的提交:

enter image description here

之后,您可以从这个新分支创建一个 PR 并将其合并。


1
我在我们的Bitbucket中没有看到这个。我们正在运行Atlassian Bitbucket v5.15.0企业版,或类似版本。 - David Hempy
2
@DavidHempy 可能只有在云版本中才能使用,我在那里可以看到它。请注意,如果您正在使用“新”PR视图,则必须切换回旧版本才能看到此按钮。 - Josh G
2
我现在非常想要这个按钮,但是我们本地的Bitbucket还没有它 :( - Stefan
3
这很好,但如果您将功能分支合并到主分支,撤销主分支,然后将相同的功能分支合并到开发分支,并希望稍后将其合并到主分支中,该怎么办?因为这些提交记录在历史记录中,当尝试合并时,它们将被撤销所取代。是否有其他替代策略? - Josh Morel

10

1
你的意思不是“现在有撤销合并拉取请求”吗? - Guildenstern

4
使用Bitbucket,我们无法撤销已合并的拉取请求。在拉取请求中存在的“还原”选项将创建一个新分支,其中包含新头(在此提交之前)。稍后,您必须将该分支合并到主/发布分支中。这是官方Bitbucket文档所传达的全部内容。 在此输入图片描述

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接