我第一次提交了一个git存储库;然后我后悔提交并想要还原它。我试试
# git reset --hard HEAD~1
我收到这条消息:
fatal: ambiguous argument 'HEAD~1': unknown revision or path not in the working tree.
此提交是存储库的第一次提交。知道如何撤消git初始提交吗?
您只需要删除您所在的分支。您不能使用git branch -D
,因为这样做有安全检查。你可以使用update-ref
来做到这一点。
git update-ref -d HEAD
不要使用rm -rf .git
或类似的东西,因为这将完全擦除整个存储库,包括所有其他分支以及您尝试重置的分支。
您可以删除HEAD并将存储库还原到新状态,您可以在其中创建新的初始提交:
git update-ref -d HEAD
创建新提交后,如果已经推送到远程,则需要强制它到远程以覆盖先前的初始提交:
git push --force origin
这个问题与this blog post有关,并且针对较新版本的Git提出了替代解决方案:
git branch -m master old_master
git checkout --orphan master
git branch -D old_master
该解决方案假定:
master
分支只有一个提交old_master
的分支,所以我可以自由使用该名称它会将现有的分支重命名为old_master
并创建一个新的,孤立的分支master
(就像它是为新的存储库创建的),之后你可以自由删除old_master
...或者不。由你决定。
注意:移动或复制git分支会在删除时保留其reflog(请参阅this code),然后创建新分支会将其销毁。由于您想要恢复到没有历史记录的原始状态,您可能希望删除分支,但其他人可能想要考虑这个小记。
在问题规定的条件下:
git init
,
大概是一些git add
操作,
和一个git commit
,
就这样!如果满足这些先决条件,那么撤消初始提交的最简单方法是:
rm -fr .git
从您执行git init
的目录。然后,您可以重做git init
以重新创建Git存储库,并重新添加任何您认为没有第一次做出的明智的更改,并重做初始提交。
危险!这将删除Git存储库目录。
它会永久地删除Git存储库目录,并且无法恢复,除非你在某个地方有备份。在前提条件下,您没有想要保留在存储库中的任何内容,因此您不会丢失任何内容。您添加的所有文件仍然可以在工作目录中使用,假设您尚未修改它们并且尚未删除它们等等。但是,只有在您的存储库中没有任何其他内容时,这样做才是安全的。在第一次提交存储库问题中描述的情况下 - 然后后悔它,它是安全的。但是,很多时候,它并不安全。
这样做也可以安全地删除不需要的克隆存储库;它对从中克隆的存储库没有任何损害。它会丢弃您在副本中完成的任何操作,但不会影响原始存储库。
要小心,但在满足前提条件时安全有效。
如果您已经对要保留的存储库执行了其他操作,那么这不是适当的技术 - 您的存储库不再满足此前提条件。
你不能。所以:
rm -rf .git/
git init
git add -A
git commit -m 'Your new commit message'
git reset --hard进行更改,然后执行
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的整个想法。唯一好的方法是创建新的并删除不需要的分支。有关信息,请参阅git help branch
。
您所要做的就是恢复提交。
git revert {commit_id}'
然后推它
git push origin -f
我会告诉最终对我有用的东西。我需要删除存储库上的初始提交,因为隔离的数据被错放了,提交已被推送。
确保您当前在正确的分支上。
git checkout master
git update-ref -d HEAD
git commit -m "Initial commit
git push -u origin master
这能够解决问题。
重要
这是在一个无法公开访问的内部存储库中,如果您的存储库是公共可访问的,请假设您需要还原的任何内容已被其他人删除。