我想删除 git 历史记录中的特定提交 C,以及一些单提交合并。
历史看起来是这样的。在此示例中,我想删除 single-commit-mergem6
和有问题的 commit C
。
---m0-------------------m1---m2---m3-------------m4---m5----m6---m7---(...)
\ / \ / \ /
b0---b1---b2---b3 b4--(C)--b5 b6
我想结束这个(突出显示的更改):
vv
---m0------------------m1---m2---m3---------m4---m5---b6---m7---(...)
\ / \vvvvvvv/ ^^
b0---b1---b2---b3 b4---b5
^^^^^^^
如果我使用“git rebase -i”来切除C
and b6/m6
,这可行,但我得到:
---m0---b0---b1---b2---b3---m1---(...)---
历史被夷为平地。我想保留整个结构。相反,如果我使用--preserve-merges
标志运行,那么我会得到:
error: Commit <sha-1 corresponding to m6> is a merge but no -m option was given.
fatal: cherry-pick failed
Could not pick <sha-1 corresponding to m6>
而且我不能删除b6/m6
(虽然我可以删除C)。
什么是最终达到预期结果的正确方法?如果这很重要,我正在使用 git 1.8.4。
(请注意,我仔细阅读的有关 StackOverflow 的其他问题似乎并没有说明这个非常具体的情况,所以据我所知,这不是一个重复的问题。)