我第一次提交到git存储库;然后我后悔提交并想要恢复它。我试着

# git reset --hard HEAD~1

我得到了这样的信息:

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

此提交是存储库的第一次提交。知道如何撤销git的初始提交吗?


当前回答

这个问题的链接来自这篇博客文章,并且针对新版本的Git提出了一个替代解决方案:

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

该解决方案假设:

在你的主分支上只有一个提交 没有称为old_master的分支,所以我可以自由使用这个名称

它会将现有的分支重命名为old_master,并创建一个新的、孤立的分支master(就像为新的存储库创建的一样),之后你可以自由地删除old_master…与否。由你决定。

注意:移动或复制一个git分支会保留它的reflog(参见这段代码),而删除和创建一个新分支会破坏它。由于您希望回到没有历史记录的原始状态,您可能希望删除分支,但其他人可能希望考虑这个小注释。

其他回答

这个问题的链接来自这篇博客文章,并且针对新版本的Git提出了一个替代解决方案:

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

该解决方案假设:

在你的主分支上只有一个提交 没有称为old_master的分支,所以我可以自由使用这个名称

它会将现有的分支重命名为old_master,并创建一个新的、孤立的分支master(就像为新的存储库创建的一样),之后你可以自由地删除old_master…与否。由你决定。

注意:移动或复制一个git分支会保留它的reflog(参见这段代码),而删除和创建一个新分支会破坏它。由于您希望回到没有历史记录的原始状态,您可能希望删除分支,但其他人可能希望考虑这个小注释。

你可以删除HEAD并将你的存储库恢复到一个新的状态,在那里你可以创建一个新的初始提交:

git update-ref -d HEAD

在你创建一个新的提交后,如果你已经推送到远程,你将需要强制它到远程,以覆盖之前的初始提交:

git push --force origin

Git重置——很难 做出改变,然后去做

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

or

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

然后

git push origin master --force

——force将重写你在第一步重置的commit。

不要这样做,因为你将违背VCS系统,特别是git的整个思想。唯一好的方法是创建新的分支并删除不需要的分支。详见git帮助分支。

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

git update-ref -d HEAD

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

从技术上讲,要恢复最初的提交,你需要做:

git revert HEAD

但是,由于这记录了一个新的提交,它会逆转上次提交的影响,您不妨自己进行一个新的提交,以修复最初提交所引入的问题。这样,您就可以保持最初的提交(即,您可以保持历史记录不变),这是您可能想要做的(特别是如果,例如,您已经推送到共享存储库)。否则,你可能更愿意重新开始。即,删除存储库并创建一个新的存储库。