说我有一个git repo,有这样的提交历史:A-B-C-D-E
现在,我突然意识到,提交B和C是完全有缺陷的,没有必要。 另外,假设我完全可以自由地重写项目历史(也许我正在单独研究项目)。
我有另一个分支指向提交B和C,因此丢失它们不是问题。如果我真的需要这些更改,我可以查看该分支并查看它们。
但是对于主分支,我想强制历史记录为A-D'-E',其中D和E不仅具有修改的父列表,而且还不包含提交引入的更改B和C.
这可能吗?如果是这样,怎么样?
答案 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。