下面是我的 git 提交历史记录:
HEAD
... +500 commits
A 4140759b
A c5cf69a2
A 3e5282cb ⎯┐ << Merge branch B
| 94936548 B
| 02a550ce B
A 5d09daa9 ⎯┤ << Pull request
| afbe397b B << Merge branch A into B
| 74fe4f3c B
| 86cdc993 B
| 223e1740 B
| a7ea596a B
| 0d4c36cf B
A 2740d295 |
A 24437962 |
A 73725f04 |
A 90be4300 |
A 6b1720d6 ⎯┘
A d65bf4bd
...
我想删除 B 分支历史记录并合并提交,只保留 A 分支历史记录。
但是,它们是非常旧的提交,最新提交之间有数百次提交,
所以
git rebase -i
命令造成了很多我无法解决的冲突。
d65bf4bd 和 c5cf69a2 之间的一些提交被删除也没关系。
但是,c5cf69a2 之后的最近提交不应受到影响。
如何从历史记录中彻底删除B分支历史记录?
我的预期结果如下:
HEAD
... +500 commits
pick A 4140759b
pick A c5cf69a2
[drop] A 3e5282cb ⎯┐ << Merge branch B
[drop] | 94936548 B
[drop] | 02a550ce B
[drop] A 5d09daa9 ⎯┤ << Pull request
[drop] | afbe397b B << Merge branch A into B
[drop] | 74fe4f3c B
[drop] | 86cdc993 B
[drop] | 223e1740 B
[drop] | a7ea596a B
[drop] | 0d4c36cf B
pick A 2740d295 |
pick A 24437962 |
pick A 73725f04 |
pick A 90be4300 |
pick A 6b1720d6 ⎯┘
pick A d65bf4bd
...
听起来如果你使用 rebase 交互式的话会会很痛苦......实际上,你为什么要尝试交互式?如果分支 B 的 2 次合并是一个接一个,那么您应该能够像这样完成它:
git rebase --rebase-merges --onto 2740d295 3e5282cb HEAD
这应该删除 B 中的提交和 2 个合并提交。这并不是说您不会遇到冲突....您仍然会遇到冲突,但考虑到您正在使用
--rebase-merges
它 will 包括合并(尽管您可能仍然需要解决合并中的冲突)并且其他冲突可能与您不的变化相关,包括来自B
的变化。