如何恢复初始的git提交?

我第一次提交一个git仓库, 然后我对这个承诺感到后悔,想要恢复它。 我试试

# git reset --hard HEAD~1 

我得到这个消息:

 fatal: ambiguous argument 'HEAD~1': unknown revision or path not in the working tree. 

这个提交是存储库的第一次提交。 任何想法如何撤消混帐的初始提交?

你只需要删除你所在的分支。 你不能使用git branch -D因为这样做有安全检查。 你可以使用update-ref来做到这一点。

 git update-ref -d HEAD 

不要使用rm -rf .git或类似的东西,因为这将完全清除包括所有其他分支以及您尝试重置的分支在内的整个存储库。

您可以删除HEAD并将存储库恢复到新状态,您可以在其中创build一个新的初始提交:

 git update-ref -d HEAD 

创build新的提交后,如果您已经推送到远程,您将需要强制它到远程以覆盖以前的初始提交:

 git push --force origin 

最简单的方法是:

 rm -fr .git 

从你做的git init的目录。

你什么都不想保留,所以你不会失去任何东西。 但是,只有在您的存储库中没有任何东西存在的情况下,才能做到这一点。 在问题“首次提交仓库 – 然后后悔”的情况下,这是安全的。 然而,很多时候,这是不安全的。

这个问题是从这个博客文章链接,并提出了一个替代解决scheme的新版本的Git:

 git branch -m master old_master git checkout --orphan master git branch -D old_master 

该解决scheme假设:

  1. 您的master分支上只有一个提交
  2. 没有叫old_master分支,所以我可以自由地使用这个名字

它会将现有分支重命名为old_master并创build一个新的孤立的分支master分支(就像它为新的存储库创build的分支master分支),之后您可以自由删除old_master …或者不要。 由你决定。

你不能。 所以:

 rm -rf .git/ git init git add -A git commit -m 'Your new commit message' 

混帐重置 – 硬改变,然后做

 git add -A git commit --amend --no-edit 

要么

 git add -A git commit --amend -m "commit_message" 

接着

 git push origin master --force 

–force将在第一步中重写您重置的提交。

不要这样做,因为你正要违背VCS系统和git的整个想法。 唯一不错的方法是创build新的和删除不需要的分支。 有关信息,请参阅git help branch