【发布时间】:2013-09-20 20:33:04
【问题描述】:
我想删除 git 历史记录中的特定提交 C,以及一些单提交合并。
历史是这样的。在此示例中,我想删除单一提交合并 m6 和有问题的提交 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 和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 上的其他问题似乎并没有说明这个非常具体的情况,所以据我所知,这不是一个重复的问题。)
【问题讨论】:
-
我下面的答案本身并不是一个真正的答案,但对于评论来说太大/需要格式化。我知道为此想出一个复制器会很痛苦,但是如果你可以想出一个,并且如果它是一个错误,那肯定会帮助 git 人员修复它。 :-)
标签: git git-rebase