【问题标题】:How to perform a git rollback via a Pull Request?如何通过拉取请求执行 git 回滚?
【发布时间】:2016-08-11 02:03:43
【问题描述】:

我们严格使用 PR 来对我们的 production 分支进行更改(如您所愿)。我的假设是回滚意味着在合并feature 主题分支之前创建一个rollback 分支,如果需要,我们可以通过rollback PR 回滚。然而这并没有像我想象的那样工作。

创建回滚分支:

git checkout 6af89ed -b rollback-prod

合并特征分支:

# production branch
git merge new-feature

回滚:

# production branch
git merge rollback-prod
Already up-to-date.

如您所见(如果我错了,请纠正我),因为提交已经存在于 production 分支中,它中继 Already up-to-date

我面临的问题是,这种回滚需要通过我们的 GUI git 工具 (bitbucket) 进行。所以手动修复命令并不是一个真正的选择。

是否有推荐的方式通过 PR 回滚到提交?

编辑 1:

我想明确指出,rollback 需要提前创建,这样操作员就不必在回滚时接触命令行……假设这是可能的,也许不是。

【问题讨论】:

标签: git bitbucket rollback pull-request


【解决方案1】:

在 Git 中有两种方法可以有效地“回滚”提交。一种是执行交互式变基,在其中删除一个或多个提交,另一种是执行git revert。但是,因为您想通过拉取请求来实现回滚,所以唯一的选择是执行git revert。因此,您可以尝试以下方法:

git checkout production
git checkout -b rollback-prod      # create rollback branch from production
git revert 6af89ed^..HEAD          # add revert commit to this branch
git push origin rollback-prod      # push this branch to Bitbucket

现在,您可以在 Bitbucket 中为 rollback-prod 分支创建拉取请求。完成后,6af89ed 提交将被有效还原。

【讨论】:

  • 请参阅我的编辑,了解为什么这不是根据要求所需的方法。
  • 如果该提交尚不存在,则您无法提前还原该提交。 AFAIK,我给出的解决方案是通过拉取请求来做到这一点的唯一方法,它使用合并将一个分支带入另一个分支。
  • 据我了解,git revert 6af89ed 只会恢复给定提交中的更改。那是对的吗?如果 OP 想要恢复自该提交到 HEAD 以来的所有提交,则该命令需要稍微复杂一些。
  • @Code-Apprentice 我不清楚 OP 想要什么,无论是恢复单个提交还是其他什么。我更新了从6af89edHEAD 的范围。
  • "如果该提交尚不存在,则您无法提前还原该提交。AFAIK,我提供的解决方案是通过拉取请求执行此操作的唯一方法,该请求使用合并来带来一个分支到另一个。”这就是我要澄清的。
【解决方案2】:

您可以在当前的master(或您需要开始回滚的任何地方)创建rollback 分支,并在您想要撤消的所有提交上使用git revert。现在你有了一个分支,你可以将它用于拉取请求。

【讨论】:

  • 我想过,但这也意味着revert PR只能在合并后创建。我想提前创建rollback分支,以便Ops在必要时更容易回滚,从而可以避免命令行。
  • @kaizenCoder 这是一次性的事情还是你希望 Ops 需要更频繁地做的事情?
  • "这意味着revert PR只能在合并后创建"为什么?
  • 您无法还原尚不存在的内容。
  • @Code-Apprentice: 好吧,这是一个后备活动,即使代码不能按预期工作,所以是正常的..关于“为什么?”,恢复是在之后执行的合并已经发生。我确实明白这是 revert 的重点,但我的要求是先创建回滚分支,在合并之前指向 production 分支上的现有提交/头。
猜你喜欢
  • 2020-05-14
  • 2014-04-30
  • 1970-01-01
  • 2011-12-31
  • 2021-02-17
  • 2017-08-22
  • 1970-01-01
  • 2017-04-11
  • 2017-08-04
相关资源
最近更新 更多