所以我有了,所有金色的东西最终都会被投入其中。我有一个主题分支,/trunk
通常,您会将/topicA合并到trunk中,这将是一次提交。万岁!若要撤消此合并,只需反向合并此合并导致的提交。轻松点。
现在,假设我有/topicA并将其合并到/topicA。但是我有一个与/trunk相关的错误修复程序。那么,我是否应该再次承诺/topicA?我甚至可以重新合并/topicA以便/topicA包含/trunk。但是,如何轻松地回滚所有/topicA、原始工作和错误修复?
提交历史记录:
承诺/topicA
承诺/topicA
承诺/topicA

/topicA合并到/topicA

错误修复1到/trunk
/topicA重新合并到/topicA以进行错误修复

错误修复2到/trunk
BugFix3到/topicA
/topicA重新合并到/topicA以进行错误修复

是吗???(未合并/trunk,包括错误修复)
我知道你可以取消合并每个bug,然后进行初始合并,但这看起来一点也不性感。
吉特对此也有答案吗?

最佳答案

您可以使用

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

这将打开默认文本编辑器,其中包含提交列表(包括合并)。从编辑器中的列表中删除所有合并并保存,然后退出。git将重播除您删除的提交之外的所有提交,从而重写历史记录。您的/TopICA分支仍然存在,因此您可以简单地将其合并到卡车中。
这有助于所有合并在交互式编辑器中都有“合并分支”一词,因此很容易识别它们。
下面是一个编辑器中的文本示例,该文本是在虚拟存储库上发出命令后购买的
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'

您不希望合并发生,所以只需删除该行及其前面的行,因为在本例中它是合并的一部分。
pick 07c2942 Added "Hello" to README
pick e98e38b Added "There" to README

保存和退出,Git现在将重放这些提交,减去合并。
注意,您可以删除任何行,该提交将从存储库中删除。此外,您还可以按照您喜欢的顺序重新排列提交。如果中间有合并,可以剪切并粘贴到最后。

07-26 08:49