2012-04-14 79 views
59

我想删除我的一个GitHub存储库中的最后2个提交。我试着建议here:git push -f origin HEAD ^^:master。它似乎有效,最后两个提交被删除。如何删除Github上的最后n个提交和本地?

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

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

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

有什么想法?

回答

112

要删除的最后两次提交本地我建议使用:

git reset --hard HEAD^^ 

再次基于是一个完全不同的操作,不会帮助你在这里。

+14

如果您已将此更改推送到远程存储库。你可以用git push -f – 2013-01-14 11:33:54

+0

删除它你可以概括这最后n个提交吗? – 2014-04-29 00:39:43

+3

@ user_19您可以执行诸如'git reset --hard HEAD^4'或'git reset --hard HEAD〜4'之类的操作。尽管如果你的历史包含合并,情况可能会变得复杂一些。你可以在相应章节[这里](https://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html)找到更多关于指定修订的信息。 – 2014-04-29 20:23:10

12

以下为我工作

git reset HEAD~n 

它消除了从本地回购最后n提交,因为HEAD^只删除一个。如果您需要从远程删除这些更改,则可能需要强制推送,因为您将位于远程后面。

git push -f origin <branch> 
22

如果你想删除2(二)最后提交,有一个简单的命令来做到这一点:

git reset --hard HEAD~2 

您可以更改2为任意数量的最后承诺要去掉。

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

git push -f 

然而,我不建议做任何git命令-f--hard选项涉及如果在提交后想要删除远程(Github)上有新的提交。在这种情况下,请始终使用git revert

+0

做了我留下来的改变吗? – 2017-04-22 10:16:48

+0

@SymfonyUser,no。当你做出'硬'命令时,你放弃*这两个提交。如果要保存更改,请在应用重置之前创建这些提交的“diff”文件。 – Dherik 2017-04-24 12:05:57

+1

@ZhahayerTahir如果你想撤销最后5次提交的* commit *,那么只要做'git reset HEAD〜5'(不要使用'hard')。这样你就可以在阶段状态(即未提交)中获得更改。对我来说,看看[这个答案](https://stackoverflow.com/a/927386/5175709)。 – Honey 2017-11-10 18:24:29

相关问题