可能重复:
如何删除'git commit'
知道这将改变历史,我想从存储库的历史中删除一些意外提交.我希望所有其他提交保留其存储库的状态.因此,我想要删除的提交的更改将由它们之后的提交覆盖.
我怎么能在Git中做到这一点,我怎样才能将它也应用于Github上的存储库?
如果我理解正确,"挤压"就是你想要的.
-A-B-C-D-E-F-G-H
Run Code Online (Sandbox Code Playgroud)
鉴于上面的历史记录,您应该在第一次提交之前选择提交.假设您想将F和E压缩为D,将H压入G,因此在第一个之前的提交是C.
git rebase -i C
Run Code Online (Sandbox Code Playgroud)
您将看到一个包含以下内容的文本文件的编辑器:
pick D
pick E
pick F
pick G
pick H
Run Code Online (Sandbox Code Playgroud)
修改为:
pick D
squash E
squash F
pick G
squash H
Run Code Online (Sandbox Code Playgroud)
系统将要求您查看新提交的提交消息,
生成的历史记录将如下所示:
-A-B-C-D'-G'
Run Code Online (Sandbox Code Playgroud)
请注意,您总是将较新的提交压缩为较旧的提交,而不是相反.因此pick G和squash H.在历史记录继续之后,将其视为修改提交.
PS:要将其导入GitHub存储库,您必须进行强制推送git push -f origin(假设这origin是您的GitHub远程).
PPS:有关详细信息,请参阅git-rebase的手册页.