从存储库历史记录中删除提交

dan*_*jar 1 git commit github

可能重复:
如何删除'git commit'

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

我怎么能在Git中做到这一点,我怎样才能将它也应用于Github上的存储库?

Kor*_*tor 5

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

  -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 Gsquash H.在历史记录继续之后,将其视为修改提交.

PS:要将其导入GitHub存储库,您必须进行强制推送git push -f origin(假设这origin是您的GitHub远程).

PPS:有关详细信息,请参阅git-rebase手册页.