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

Posted

技术标签:

【中文标题】GitHub:重新打开合并的拉取请求【英文标题】:GitHub: Reopening a merged pull request 【发布时间】:2012-09-22 08:42:38 【问题描述】: 我做了一些更改 我提交了拉取请求 拉取请求已被接受并合并。 我们发现了一个错误 在我修复错误的同时,再次删除了更改(之前强制推送到 1 个提交)。

我现在已经修复了这个错误,并希望通过 1 次额外提交重新提交拉取请求。有什么方法可以重新打开拉取请求或更新它,还是我必须创建一个新的拉取请求,再次输入描述等? Gitorious 有这个功能,我们最近搬到了 GitHub。

【问题讨论】:

我今天遇到了类似的情况,即使用“合并拉取请求”按钮,默认情况下将更改合并到目标分支并关闭 PR。后来我在测试中发现了一个我希望原始开发人员修复的错误。我想要一种重新打开此 PR 的方法,以便可以将更多提交添加到同一个 PR,但由于没有重新打开 PR 的按钮,所以不能。 【参考方案1】:

答案似乎是:你不能。

一旦拉取请求被合并并关闭,它就会被永久锁定并且无法重新打开。如果您的拉取请求被合并、关闭,然后您的更改被拉出(通过强制向后推到合并之前),您将需要向分支添加提交并创建一个新的拉取请求,复制所有详细信息并可能提供指向原始拉取请求的链接,用于手动保存历史记录。

可能是未来 GitHub 的一个不错的功能请求。

【讨论】:

不知道什么时候改的,不过你现在可以评论和重新打开已关闭的 PR。 @LB,您似乎无法重新打开已关闭并合并的 PR。 其实可以。假设您已经恢复了初始合并,您可以创建主仓库的一个分支,并在这个新分支上恢复正在恢复合并的提交。 @SsjCosty 但这并不是重新打开已关闭和合并的 PR。您可以随时打开新的拉取请求,这是您的解决方案所需要的。 “可能是未来 GitHub 的一个不错的功能请求。” 实际上,不,它不会。如果 PR 可以在创建后重新定义,那么人们在不同时间检查 PR,可能会漂移。只需创建另一个 PR 并在文本中“提及”前一个 PR。如果你想引用某种里程碑,那么看的不是 PR,而是标签。【参考方案2】:

我刚刚成功地重新打开了一个拉取请求

    评论拉取请求 点击评论表单上显示的“提交并重新打开”按钮。

【讨论】:

我没有设法复制这个 - 你能解释一下看到这种行为所需的步骤吗?我尝试评论一个关闭的拉取请求(没有工作),评论一个关闭的拉取请求并推送到它正在拉入的分支(没有工作)。还有什么要尝试的吗?是否需要合并拉取请求,然后以某种方式取消合并? 我不知道产生影响的隐藏要求是什么。可以是任何一个(已为拉取请求提交了新的更改,我是项目所有者的成员,其他......) 我现在已经尝试了你提到的所有东西,仍然看不到它。我是回购所有者。在 google 中搜索“提交并重新打开 GitHub”会得到一个点击 - 这个页面。任何进一步的信息都会非常有帮助。您的拉取请求最初是否被拒绝? 我可以使用未合并的拉取请求来复制它——但这不是这个线程的目的。 是的,他指的是封闭的拉动,而不是合并的拉动。【参考方案3】:

只需从您已完成额外 1 次提交的现有分支派生一个新分支。从那里提交拉取请求。

【讨论】:

这将导致新的拉取请求没有原始历史记录。 这就是我最终要做的。是的,历史不那么线性,但对我来说没问题。【参考方案4】:

您可以使用还原操作:

它将创建另一个拉取请求,以撤消合并 PR 中所做的所有更改。

【讨论】:

这不是最佳做法 :) @antonbormotov 你能提出更好的方法吗? 假设,我们已将 pr 与提交(mA 和 mB)合并到我们想要恢复的稳定分支。合并 "revert" pr 后,历史将看起来像提交树:X-Y-mA-mB-C-D-rA-rB-E-F。为什么你想在历史中看到所有这些提交,应用更改(mA,mB)然后取消它们(rA,rB)?最好从稳定分支中重新设置并删除那些“坏”提交 mA 和 mB 并保持历史记录干净。当然,如果合并是相对较新的,这是有道理的。 不仅历史看起来很难看,而且当你准备好时,你也不能再简单地将恢复的提交合并回来。 我有一些相似的场景,只是略有不同。我有一个 PR 需要审核,并且应该等待另一个 PR 被合并。但是我没看到,过早地合并了这个PR。我实际上做了@WilliamWeckl 的建议。但现在我想用最初创建的相同更改创建相同的 PR。但是当我创建 PR 时,master 分支没有显示出任何区别,尽管当我看到单个文件时它们是不同的。有什么想法吗?【参考方案5】:

您可以只恢复一个已恢复的 PR,这应该包含从原始 PR 恢复的所有更改。

【讨论】:

【参考方案6】:

我设法通过以下方式重新打开它:

    恢复基础分支 重新打开并发表评论

【讨论】:

【参考方案7】:

我已经尝试了所有技巧和窍门。 只是 - 您无法重新打开它。

就是这样。 (即使我很伤心他们还没有想出这个)

【讨论】:

【参考方案8】:

嗯,现在是 2021 年,而 —almost a decade later — 令我沮丧、昏迷和喜悦的是,一个简单的 gh pr reopen N¹ 确实重新打开了我的 PR — 在我知道无法重新打开的情况下之前通过 UI(或者我相信)。 ¯\_(ツ)_/¯

愿这对你也有用!

(¹) gh 是 GitHub’s official command line tool。

【讨论】:

PR 在您尝试重新打开之前是否已经合并? 是的。 (不使用合并按钮:基础分支被意外推送到包括来自 PR 的提交。)基础分支后来被强制推回其原始状态,但 PR 无法重新打开,无论如何我都没有试过了。

以上是关于GitHub:重新打开合并的拉取请求的主要内容,如果未能解决你的问题,请参考以下文章

如何避免使用 API 延迟 github 拉取请求合并

Github新手入门

恢复了来自 github 的拉取请求,但两个分支没有区别

多用户 Github 拉取请求

如何为 lint 和运行测试的拉取请求编写管道

显示已在目标分支中的提交的 GitHub 拉取请求