2012-12-30 115 views
1

可能重复:
How to delete a ‘git commit’从库中删除历史记录提交

知道,这将改变历史,我想删除一些不小心从库的历史承诺。我希望所有其他提交都保留其存储库的状态。因此,我想要删除的提交更改将由提交后的提交来覆盖。

我该如何在Git中做到这一点,我怎样才能将其应用于Github上的存储库?

回答

5

如果我理解正确,“压扁”就是你想要的。

-A-B-C-D-E-F-G-H 

考虑到上面的历史,你应该在第一次提交之前选择你想压缩的提交。比方说,你想壁球F和E为d和H为G,所以在第一个是C.

git rebase -i C 

您将看到一个编辑器包含类似下面的文本文件提交:

pick D 
pick E 
pick F 
pick G 
pick H 

修改到这一点:

pick D 
squash E 
squash F 
pick G 
squash H 

你会被要求审查提交新提交的信息,

产生的历史将是这样的:

-A-B-C-D'-G' 

请注意你总是挤压较新提交到旧的,而不是相反。因此,pick Gsquash H。把它看作是在你的历史继续之后修改一个提交。注意:为了将它存入你的GitHub仓库,你需要强制推入git push -f origin(假设origin是你的GitHub远程)。

PPS:欲了解更多信息,请参阅man page of git-rebase

+0

那么我的历史将成为'A-B-C-D-G'? – danijar

+0

它是'-A-B-C-D'-G',我编辑了我的答案。但是'D'= D + E + F'和'G'= G + H'。 – Koraktor

+0

后来的提交是否受到影响?例如,如果我从“A-B-C-D”开始,并将“C”压缩到“B”中。结果是“A-B'-D”还是“A-B'-D'”? – danijar

相关问题