git:删除一系列错误提交引入的更改

时间:2010-12-06 11:31:25

标签: git git-rebase

说我有一个git repo,有这样的提交历史:A-B-C-D-E

现在,我突然意识到,提交B和C是完全有缺陷的,没有必要。 另外,假设我完全可以自由地重写项目历史(也许我正在单独研究项目)。

我有另一个分支指向提交B和C,因此丢失它们不是问题。如果我真的需要这些更改,我可以查看该分支并查看它们。

但是对于主分支,我想强制历史记录为A-D'-E',其中D和E不仅具有修改的父列表,而且还不包含提交引入的更改B和C.

这可能吗?如果是这样,怎么样?

3 个答案:

答案 0 :(得分:5)

git rebase -i HEAD~5

然后,从提交列表中删除不需要的提交

答案 1 :(得分:2)

我将假设有5次提交。

在这种情况下,你会做:

git rebase -i HEAD~5

然后你将删除与提交B和C有关的2行。

最后,你会做一个:

git rebase --continue

答案 2 :(得分:1)

git rebase --onto $commit_A $commit_C $commit_E

这表示“接受C之后的所有提交,包括E,并在A之上重播它们。”

当然,您可以对您所指的提交使用任何表示法。例如。如果master位于E并且您的分支指向C,请说backup,您也可以这样说:

git rebase --onto $commit_A backup master

这样会更方便,因为HEAD指向master,而master反过来指向重写的E。