GitHub:重新打开已合并的拉取请求

174
  • 我做了一些更改。
  • 我提交了一个拉取请求(Pull Request)。
  • 拉取请求已被接受并合并。
  • 我们发现了一个错误。
  • 在我修复错误的同时,更改被再次删除(强制推送到之前的1个提交)。

我已经修复了错误,想要提交一个带有1个额外提交的新拉取请求。有没有办法重新打开或更新这个拉取请求呢?还是说我必须创建一个新的拉取请求,再重新输入描述等信息?Gitorious有这个功能,而我们最近转移到了GitHub。


1
我今天遇到类似的情况,即使用了“合并拉取请求”按钮,该按钮默认将更改合并到目标分支并关闭PR。后来我在测试中发现了一个bug,希望原开发人员修复。我想要重新打开这个PR,以便可以向此相同的PR添加更多提交,但是无法重新打开PR,因为没有重新打开PR的按钮。 - SBirthare
10个回答

172
答案似乎是:你无法重新打开已合并和关闭的拉取请求。 一旦拉取请求被合并和关闭,它将永久锁定,无法重新打开。如果您的拉取请求被合并、关闭,然后您的更改被撤回(通过向后强制推送到合并之前),您将需要向分支添加提交,并创建一个新的拉取请求,复制所有细节,可能需要提供指向原始拉取请求的链接以手动保存历史记录。
这可能是未来 GitHub 的一个不错的功能请求。

11
我不知道这个更改是什么时候进行的,但现在你可以对已关闭的 Pull Request 进行评论并重新打开它们。 - LB--
26
@LB,看起来你无法重新打开已经关闭并合并的PR。 - A Kaptur
2
你实际上是可以的。假设你已经撤销了最初的合并,你可以在主仓库上创建一个分支,在这个新分支上撤销撤销合并的提交。 - Costin_T
15
但这并不是重新打开一个已关闭且合并的 PR。你总是可以打开新的拉取请求,这就是你的解决方案所需要的。 - Adam Grant
4
这可能是未来GitHub的一个不错的功能建议。实际上,不,不是这样的。如果PR在创建后可以重新定义,那么在不同时间检出PR的人可能会出现漂移。只需创建另一个PR并在文本中“提到”之前的PR即可。如果您想引用某种里程碑,那就不是要看PR而是标签。 - Scott Prive
3
@ScottPrive 让我澄清一下情况。原始 PR 已合并到一个不再存在的分支中。Master 曾经被强制回退过,因此合并提交已不存在。查看从分支合并到 Master 的已合并 PR 是没有意义的,因为合并提交已不存在,而在相同的分支之间有两个同名的 PR 比重新打开原始 PR 更加令人困惑。 - Michael Parker

11

我刚刚通过以下步骤成功重新打开了一个拉取请求:

  1. 在拉取请求上发表评论
  2. 点击出现在评论表单上的“提交并重新打开”按钮

2
我还没有成功复制这个问题 - 你能解释一下需要哪些步骤才能看到这种行为吗?我尝试在已关闭的拉取请求上进行评论(不起作用),在已关闭的拉取请求上进行评论并将其推送到正在拉取的分支中(不起作用)。还有其他什么可以尝试的吗?是否需要合并拉取请求,然后再取消合并? - Michael Parker
我不知道造成差异的隐藏要求是什么。可能是其中之一(已提交新的拉取请求更改,是项目所有者的成员,其他...) - Tim Lovell-Smith
2
我已经尝试了您提到的所有方法,仍然看不到它。我是 repo 的所有者。在谷歌上搜索“提交并重新打开 GitHub”只有一个结果-这个页面。任何进一步的信息都将非常有帮助。您的拉取请求最初被拒绝吗? - Michael Parker
77
我可以使用未合并的拉取请求来复制这个问题,但这不是本讨论串讨论的重点。 - Dan Tello
6
是的,他指的是被关闭的拉取请求,而不是已合并的拉取请求。 - loujaybee

4

作者修改后添加: 现在是2023年,共识似乎是这从未奏效。


好吧,现在是2021年——快十年过去了——令我惊讶、恍惚和欣喜的是,简单的 gh pr reopen N¹ 命令重新打开了我的PR——在我知道之前(或者说我认为之前)它是不可能通过UI再次打开的。¯\_(ツ)_/¯

希望这对你也有用!

(¹) ghGitHub官方命令行工具


1
你在尝试重新打开 PR 之前,它已经被合并了吗? - Michael Parker
2
是的。(不使用合并按钮:基础分支被意外推送,包括来自PR的提交。)后来,基础分支被强制推回到其原始状态,但是无论我尝试什么方法,都无法重新打开PR。 - Dato
4
"Pull request #20(LOTH Prose)无法重新打开,因为它已经被合并" - 你有任何额外的提交或其他东西吗? - mcbain83
我的已经合并了,上面的技巧对我也没有用。 - blackcatweb
1
即使将基础重置到合并提交之前,也无法在已合并的PR上工作。 - Hannes
显示剩余2条评论

4
你可以使用回滚操作: enter image description here 它将创建另一个拉取请求,撤消合并的PR中所做的所有更改。

这不是最佳实践 :) - antonbormotov
4
@antonbormotov,你能提出更好的方法吗? - William Weckl
假设我们已将包含提交(mA和mB)的pr合并到我们想要还原的稳定分支中。在合并“还原”pr之后,历史记录将显示提交树:X-Y-mA-mB-C-D-rA-rB-E-F。为什么要在历史记录中查看所有这些应用更改(mA、mB)然后取消它们(rA、rB)的提交呢?从稳定分支中重新制作,并删除那些“不良”的提交mA和mB,以保持历史记录的清洁,这是更好的选择。当然,如果合并是相对较新的,则有意义。 - antonbormotov
1
不仅历史记录看起来很丑,而且当你准备好时,也不能简单地将已还原的提交合并回去。 - Michael
我有一个类似的情况,只是有一点不同。我有一个需要审核的PR,并且应该等待另一个PR合并。但是我没有看到它,提前合并了这个PR。我实际上做了@WilliamWeckl建议的事情。但现在我想创建相同的PR,具有相同的更改,这些更改最初是创建的。但是当我创建PR时,主分支显示没有差异,尽管当我查看单个文件时它们是不同的。有什么想法吗? - Vikas
我认为这个“还原”按钮的作用与最初询问者要求的重新打开原始PR以添加额外提交的目的不同。相反,这个“还原”按钮实际上是“撤销”PR并重新开始整个过程的吗? - Shawn

4

我已经尝试了所有的技巧和贴士。简单来说 - 你无法重新打开它。

事实就是这样。(尽管我很难过他们没有想出解决方法)


3

只需从您已经进行了额外1次提交的现有分支派生一个新分支,然后从那里提交拉取请求。


6
这将导致一个全新的拉取请求,其中不包含原始数据的任何历史记录。 - Dave
1
这就是我最终做的。是的,历史记录不太线性,但对我来说没问题。 - possen

3
您可以简单地还原一个已经被还原的拉取请求,这样应该就包含了从原始拉取请求中所还原的所有更改。

1

我通过以下步骤成功重新打开它:

  1. 恢复基础分支
  2. 重新打开并进行评论

0
现在是2023年,您可以在左下角轻松重新打开一个拉取请求。此外,您还可以随意编辑评论。谢谢!

0
一个已经关闭的公关现在将重新开放一个按钮。

enter image description here


1
但是你添加的截图显示的是一个“关闭拉取请求”的按钮,而不是一个“重新打开拉取请求”的按钮。你应该[编辑]你的回答,展示一个更合适的图片来证明你的说法。 - undefined

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