如何删除Github和本地上的最后n个提交?


127

我正在尝试从我的GitHub存储库中删除最后2个提交。我已尝试按照这里的建议进行:git push -f origin HEAD^^:master。似乎可行,因为删除了最后两个提交。

然后,我使用将它们从本地存储库中删除git rebase -i HEAD~2。我删除与那些提交相关的行,并检查git log它们是否被正确删除。

之后,我在本地存储库中进行了一些更改,进行了新的提交,然后推送到GitHub。问题是,在我的GitHub帐户中,我有尝试删除的前两个提交。

我认为问题出在我的本地存储库中,因为如果我将Github存储库克隆到本地并在此处进行一些更改,则当我推送一个新的提交时,那些旧的提交不会被推送到GitHub。

任何想法?

Answers:


199

要在本地删除最后两个提交,我建议使用:

git reset --hard HEAD^^

Rebase是一种完全不同的操作,在这里对您没有帮助。


23
如果您已经将此更改推送到远程存储库。您可以使用git push -f删除它
Ivan Fernandez

您能概括一下最后n次提交吗?
user_19 2014年

6
@ user_19您可以执行类似git reset --hard HEAD^4或的操作git reset --hard HEAD~4。不过,如果您的历史记录包含合并,事情可能会变得有些复杂。您可以在此处的相应部分中找到有关指定修订的更多信息。
KL-7

2
如果我想删除最近的7次提交,那么?我需要在头后放7次^吗...请清除我
Gagan Gami 2014年

4
@GaganGami,我想你会的git reset --hard HEAD~7,但是如果我错了,请纠正我。
Con Antonakos

105

如果要删除最后两(两)次提交,可以使用一个简单的命令来完成:

git reset --hard HEAD~2

您可以更改2要删除的任何数量的最后提交的。

而推动这一变化到远程,你需要做一个git push-f)的参数:

git push -f

但是,如果要删除的提交之后在远程(Github)上有新的提交我不建议对其中的git命令-f--hard选项进行任何操作。在这种情况下,请始终使用。git revert


我所做的更改会保留吗?
Zuhayer Tahir

@SymfonyUser,不。发出hard命令后,您将松开这两个提交。如果要保存更改,请diff在应用重置之前创建这些提交的文件。
Dherik

3
@ZuhayerTahir如果你只想撤销承诺的最后5次提交,然后就去做git reset HEAD~5(不使用hard)。这样,您将获得处于阶段状态(即未提交)的更改。对我来说,这个答案
蜂蜜

@Honey谢谢您的回复。我得出了相同的结论。
Zuhayer Tahir

29

以下对我有用

git reset HEAD~n

n仅从本地存储库中删除最后一次提交HEAD^。如果您需要从远程删除这些更改,则可能需要强制推送,因为您将位于远程后面。

git push -f origin <branch>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.