使用多个分支删除git历史记录中的特定提交?

时间:2014-01-29 09:35:59

标签: git branch commit history rebase

我知道如何使用git rebase --interactive从git历史记录中删除特定提交。

我的问题涉及更复杂的案例,有这样的历史:

A--X--B--C--D
       \
         E--F

我想删除提交X。问题是,在这种情况下,有两个或更多分支与父母(在这种情况下为B)在其历史记录中有X,因此单个git rebase -i将无法执行此操作(至少我不知道如何)。

是否有一种简单的方法可以删除X,或者我是否必须依赖自己的所有分支,可能还有shell脚本?

1 个答案:

答案 0 :(得分:3)

不幸的是,在这种情况下,Git并不容易。首先通过删除提交X在D分支上执行交互式rebase。

您将拥有以下历史记录:

A--X--B
 \     \
  \      E--F
   \
     B'-C'-D'

然后你需要用以下方法将F分支重新定义到B':

git rebase --onto B' B F

(用ids替换提交名称)

最终会以

结束
 A--B'-C'-D'
     \
       E'--F'