关于git:从存储库历史记录中删除提交

Remove Commit from Repository History

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How to delete a ‘git commit’

知道这将更改历史记录,我想从存储库的历史记录中删除一些意外提交。我希望所有其他提交都保留其存储库的状态。因此,我要删除的提交的更改将由后面的提交覆盖。

我如何在Git中做到这一点,以及如何将其也应用于或仅应用于GitHub上的存储库?


如果我理解正确,"挤压"就是你想要的。

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

考虑到上面的历史记录,您应该在要挤压的第一个提交之前选择提交。假设你想把f和e压缩成d,把h压缩成g,那么在第一个之前的提交是c。

1
  git rebase -i C

您将看到一个编辑器,其中有一个包含如下内容的文本文件:

1
2
3
4
5
pick D
pick E
pick F
pick G
pick H

将此修改为:

1
2
3
4
5
pick D
squash E
squash F
pick G
squash H

将要求您检查新提交的提交消息,

产生的历史记录如下:

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

请注意,您总是将较新的提交压缩到较旧的提交,反之亦然。因此,pick Gsquash H。把它看成是在你的历史发展之后修改承诺。

PS:要将其放入Github存储库,您必须强制推送git push -f origin(假定origin)是您的Github远程设备)。

PPS:有关更多信息,请参阅Git Rebase的手册页。