从 GitHub.com 上的受保护分支还原合并提交

Revert a merge commit from a protected branch on GitHub.com

我们在 GitHub 上保护了我们的开发分支,这样下游的任何人都无法直接推送他们的提交。提交需要通过特定的功能分支并通过拉取请求合并。

出现了一个功能分支被合并到开发分支的场景(经过适当的审查和更改),我们需要稍后将其还原(可能是由于需求的变化)。如果我尝试还原下游的合并提交,它将不允许我推送,因为分支是受保护的。我记得 GitHub 在我们合并分支时提供了恢复按钮。但不知何故,我现在看不到(或找不到)按钮。我们需要优先恢复提交,所以我们暂时从开发分支中删除了保护并推送了恢复提交(最丑陋的黑客)。

是否有任何其他更好的方法来还原受保护分支的提交?也许我遗漏或误解了某些 GitHub 功能。

还有一种情况是,如果我合并后从GitHub中删除了分支,那我该如何恢复呢?

恢复 GitHub

您不需要恢复(取消删除)GitHub 上的分支来恢复拉取请求产生的合并提交。例如:

不可恢复的拉取请求

有时不会出现还原按钮。来自 GitHub 关于 reverting a pull request 的帮助:

Note: You may need to use Git to manually revert the individual commits if:

  • Reverting the pull request causes merge conflicts
  • The original pull request was not originally merged on GitHub (for example, using a fast-forward merge on the command line)

我花了一段时间才找到一个例子,但是如果头分支没有使用 GitHub 上的绿色大按钮合并到基础分支中,那么它就无法在 [=46 上恢复=]:

git revert

在命令行本地,您可以使用 git revert 命令还原更改。

这将适用于您的受保护分支和下游分支。 git revert 在当前 HEAD 之前创建一个新的提交,因此您不需要强制推送,如果来自下游分支,您可以手动为还原的更改创建拉取请求。

还原合并提交比还原单亲提交稍微复杂一些,所以我建议查看 this question 了解更多信息,因为这是我以前从未做过的事情。

如果人们不习惯使用命令行,我想 SourceTree 上下文菜单上有一个项目可以恢复提交,但我不知道它如何处理合并提交。其他 GUI 应用程序中可能有类似的选项。

希望对您有所帮助!

最简单的选择是执行以下操作

git revert -m 1 "last_commit_id"