从 GitHub.com 上的受保护分支恢复合并提交
Posted
技术标签:
【中文标题】从 GitHub.com 上的受保护分支恢复合并提交【英文标题】:Revert a merge commit from a protected branch on GitHub.com 【发布时间】:2017-07-21 18:57:51 【问题描述】:我们在 GitHub 上保护了我们的开发分支,这样下游的任何人都不能直接推送他们的提交。提交需要经过特定的功能分支并通过拉取请求合并。
出现了这样一种情况,即功能分支被合并到开发分支中(经过适当的审查和更改),我们需要稍后恢复它(可能是由于需求的更改)。如果我尝试在下游恢复合并提交,它将不允许我推送,因为分支受到保护。我记得当我们合并分支时 GitHub 提供了恢复按钮。但不知何故,我现在无法看到(或找到)按钮。我们需要恢复提交的优先级,因此我们暂时从开发分支中删除了保护并推送了恢复提交(最丑陋的黑客攻击)。
还有其他更好的选择来从受保护的分支恢复提交吗?也许我遗漏或误解了一些 GitHub 功能。
还有一个场景是,如果我在合并后从 GitHub 中删除了分支,那我将如何恢复它呢?
【问题讨论】:
您是否尝试过使用git revert
并从下游分支发出新的拉取请求? git revert
应该在上游 HEAD 之前创建一个新提交
@rink.attendant.6:我没有尝试过,但它看起来绝对是源自下游的优雅解决方案之一。看起来也很简单,我在想这些东西! GitHub上有解决方案吗?我可以使用它,因为人们点击按钮比记住和编写命令更可取。
【参考方案1】:
最简单的选择是执行以下操作
git revert -m 1 "last_commit_id"
【讨论】:
【参考方案2】:在 GitHub 上恢复
您无需在 GitHub 上恢复(取消删除)分支来恢复由拉取请求产生的合并提交。例如:
不可恢复的拉取请求
有时不会出现还原按钮。来自reverting a pull request 上的 GitHub 帮助:
注意:如果出现以下情况,您可能需要使用 Git 手动还原单个提交:
还原拉取请求会导致合并冲突 原始拉取请求最初并未在 GitHub 上合并(例如,在命令行上使用快进合并)
我花了一段时间才找到一个例子,但是如果头分支没有使用 GitHub 上的绿色大按钮合并到基础分支中,那么它就无法在 GitHub 上恢复:
git revert
在命令行本地,您可以使用git revert
命令恢复更改。
这将适用于您的受保护分支和下游分支。 git revert
在当前 HEAD 之前创建一个新的提交,因此您不需要强制推送,如果来自下游分支,您可以手动为还原的更改创建拉取请求。
恢复合并提交比恢复单父提交稍微复杂一些,所以我建议查看this question 了解更多信息,因为这是我以前从未做过的事情。
如果人们不习惯使用命令行,我认为SourceTree 在上下文菜单中有一个项目可以恢复提交,但我不知道它如何处理合并提交。其他 GUI 应用程序中可能有类似的选项。
希望这会有所帮助!
【讨论】:
即使我在下游跟踪分支中恢复提交并尝试推送到受保护的分支,它仍然不允许,因为受保护的分支不允许从下游推送任何新的提交。一种方法是从下游跟踪分支创建一个新分支,还原更改,推送新分支并将其合并到受保护分支 很好的答案 - 链接到恢复合并提交的答案 - 我需要的版本。以上是关于从 GitHub.com 上的受保护分支恢复合并提交的主要内容,如果未能解决你的问题,请参考以下文章
如何从 github 上的 master 分支安装 pip 模块? [复制]