知道这会改变历史记录,我想从存储库的历史记录中删除一些意外提交。我希望所有其他提交保留其存储库的状态。因此,我想要删除的提交的更改将由它们之后的提交覆盖。
我如何在Git中执行此操作,如何将其也应用于Github上的存储库?
答案 0 :(得分: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 G
和squash H
。在历史继续发展之后,将其视为修改提交。
PS:要将此内容放入GitHub存储库,您必须强制推送git push -f origin
(假设origin
是您的GitHub远程数据库)。
PPS:有关详细信息,请参阅man page of git-rebase。