如何在Git中“撤销”一个特性分支的合并?

9

我对Git相对较为陌生,想知道这种操作是否正确,并且是否有其他方式可以删除已合并到主分支的功能分支。下面是一个例子:

我们假设正在处理三个问题(漏洞/增强),每个问题都有一个功能分支,每个分支都从版本v2.0.21中划分出来。在完成了每个问题的开发工作并经过充分的测试后,我们将其合并到主分支,并将其标记为v2.0.22,并发布到生产环境。

在发布之后,我们发现其中一个问题(Ticket2)失败了,需要删除它。这是我想到的方法,请问是否适用于删除与Ticket2相关的提交。

例如:

  1. 从v2.0.21创建一个新分支
  2. 在这个新分支上合并Ticket1(Branch1)和Ticket3(Branch3)
  3. 强制推送新分支到主分支。
  4. 将主分支标记为V2.0.23
  5. 从v2.0.23发布代码到生产环境。

希望有人可以帮助我验证这种方法,并提供更好的删除已合并到主分支的功能分支的方式。谢谢!

1个回答

11

如果您的合并操作创建了一个“合并提交”(merge commit),出于这个原因,通常是个不错的想法,那么您可以使用git revert命令和该分支的合并提交的提交ID来撤消特定功能分支的更改。

Git文档中包含有关如何撤消有缺陷的合并操作的详细说明,其中包含您可能会发现有用的更多信息。


感谢Greg的回复并指引我使用git revert。有一个快速问题 - 如果Ticket2有20个提交,那么除了逐个还原提交之外,是否有一种快速简便的方法可以一次性删除与该特性分支相关的所有提交? - Scarface
1
这正是“合并提交的还原”所要做的。它撤销了合并的影响,从而撤销了整个分支。 - Greg Hewgill
我注意到文档链接已经失效,请使用以下链接 https://www.atlassian.com/git/tutorials/undoing-changes。 - Ice_mank
@Ice_mank:我已经更新了答案中的链接,指向页面的新位置。 - Greg Hewgill

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