git - 你如何轻松地取消 merge Subversion/git 中的主题分支?

标签 git svn version-control workflow

所以我有 /trunk,所有金色的东西最终都会提交给它。我有一个主题分支,/topicA

通常,您会将 /topicA merge 到 trunk 中,这将是一次提交。万岁!要撤消此 merge ,您只需反向 merge 由此 merge 引起的提交。简单易行。

现在,假设我有 /topicA 并将其 merge 到 /trunk 中......但是我有一个与 /topicA< 相关的错误修复。那么,我应该再次提交 /topicA 吗?我什至可以重新 merge /topicA,以便 /trunk 包含 /topicA。但是如何轻松回滚所有 /topicA、原始工作和错误修复?

提交历史:

  • 致力于/topicA
  • 致力于/topicA
  • 致力于/topicA
  • ...
  • /topicA merge 到/trunk
  • ...
  • Bugfix1 到 /topicA
  • /topicA 重新 merge 到 /trunk 中以修复错误
  • ...
  • Bugfix2 到 /topicA
  • Bugfix3 到 /topicA
  • /topicA 重新 merge 到 /trunk 中以修复错误
  • ...
  • >??? (取消 merge /topicA,包括错误修正)

我知道您可以取消 merge 每个错误修复,然后进行初始 merge ,但这看起来一点也不性感。

git 也有这个问题的答案吗?

最佳答案

你可以使用重写历史

git rebase --interactive --preserve-merges <hash before first merge>

这将打开您的默认文本编辑器,其中包含包括您的 merge 在内的提交列表。从编辑器中出现的列表中删除所有 merge 并保存,然后退出。 git 将重播所有提交,不包括您删除的提交,从而重写历史记录。您的/topicA 分支仍然存在,因此您只需将其 merge 到 truck 即可。

这有助于所有 merge 在交互式编辑器中都有“merge 分支”字样,因此很容易识别它们。

这是在虚构的存储库上发出命令后,编辑器中的文本示例

pick 07c2942 Added "Hello" to README
pick e98e38b Added "There" to README
pick e3d66ad Added "Here" to README
pick 2105946 Merge branches 'master' and 'tmp'

您不希望 merge 发生,因此您可以简单地删除该行和它之前的行,因为在这种情况下它是 merge 的一部分。

pick 07c2942 Added "Hello" to README
pick e98e38b Added "There" to README

保存并退出,git 现在将重播这些提交,减去 merge 。

请注意,您可以删除任何行,并且该提交将从存储库中删除。您也可以将提交重新排列为您喜欢的任何顺序。如果中间有 merge ,可以将它们剪切并粘贴到末尾。

关于git - 你如何轻松地取消 merge Subversion/git 中的主题分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6656344/

相关文章:

git p4 : migrate full history - including integration history

windows - Git 钩子(Hook)没有触发

SVN 加载 ./myNewRepo < ./myOldRepo.dump -- 无法打开文件 'myNewRepo/format' ?

git - 使用 git svn 从 svn 项目添加旧历史

svn - 是否有允许跟踪文件名更改的源代码控制系统?

svn - Subversion : Migrating from cloud SVN repo to local SVN repo. ..丢失历史记录?

显示 user.name 的 git 命令没有给出任何结果

C#如何定义api key 等全局常量并防止上传到Github

.net - 忽略 git commit 的某些更改

git - 与 Git 相比,SVN v 1.8 分支/merge 如何?