我第一次提交了一个git存储库;然后我后悔提交并想要还原它。我试试
# git reset --hard HEAD~1
我收到此消息:
fatal: ambiguous argument 'HEAD~1': unknown revision or path not in the working tree.
此提交是存储库的第一次提交。知道如何撤消git的初始提交吗?
答案 0 :(得分:436)
您只需要删除您所在的分支。您不能使用git branch -D
,因为这样做有安全检查。您可以使用update-ref
执行此操作。
git update-ref -d HEAD
不使用rm -rf .git
或类似的内容,因为这会彻底清除整个存储库,包括所有其他分支以及您尝试重置的分支。
答案 1 :(得分:48)
您可以删除HEAD并将存储库还原到新状态,您可以在其中创建新的初始提交:
git update-ref -d HEAD
创建新提交后,如果您已经推送到远程,则需要强制它到远程,以覆盖之前的初始提交:
git push --force origin
答案 2 :(得分:11)
此问题与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),然后创建新分支会将其销毁。由于您想要恢复到没有历史记录的原始状态,您可能想要删除分支,但其他人可能想要考虑这个小记。
答案 3 :(得分:8)
在问题规定的条件下:
git init
,git add
次操作,git commit
,如果满足这些先决条件,则撤消初始提交的最简单方法是:
rm -fr .git
来自您git init
所在的目录。然后,您可以重做git init
以重新创建Git存储库,并使用您后悔没有第一次进行的任何合理的更改重做添加,并重做初始提交。
危险!这会删除Git存储库目录。
它永久地删除了Git存储库目录,并且无法恢复,除非你在某个地方有备份。在前提条件下,您没有想要保留在存储库中的任何内容,因此您不会丢失任何内容。 您添加的所有文件仍然可以在工作目录中使用,假设您尚未修改它们并且尚未删除它们等等。但是,只有在您的存储库中没有任何其他内容时,这样做才是安全的。在第一次提交存储库问题中描述的情况下 - 然后后悔它,它是安全的。但是,很多时候,它并不安全。
执行此操作以删除不需要的克隆存储库也是安全的;它对从中克隆的存储库没有任何损害。它会丢弃您在副本中完成的任何操作,但不会影响原始存储库。
小心,但在满足前提条件时安全有效。
如果您已经对要保留的存储库执行了其他操作,那么这不是适当的技术 - 您的存储库不再满足此要求的前提条件。
答案 4 :(得分:3)
你不能。所以:
rm -rf .git/
git init
git add -A
git commit -m 'Your new commit message'
答案 5 :(得分:2)
我想知道为什么不建议使用“修改”,而是被@damkrat删除了,因为在我看来,修改只是最有效地解决修复错误提交的根本问题的正确方法,因为这没有目的。没有初始提交。正如一些人强调的那样,如果没有人克隆您的存储库,则仅应像master一样修改“ public”分支。
git add <your different stuff>
git commit --amend --author="author name <author.name@email.com>"-m "new message"
答案 6 :(得分:0)
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
- 强制将重写您在第一步中重置的提交。
不要这样做,因为你要反对VCS系统和git的整个想法。唯一好的方法是创建新的并删除不需要的分支。有关信息,请参阅git help branch
。
答案 7 :(得分:0)
您所要做的就是恢复提交。
git revert {commit_id}'
然后推它
git push origin -f
答案 8 :(得分:0)
最后我将介绍对我有用的东西。 我需要删除存储库上的初始提交,因为隔离数据放错了位置,该提交已经被推送。
确保您当前在正确的分支上。
git checkout master
git update-ref -d HEAD
git commit -m "Initial commit
git push -u origin master
这能够解决问题。
重要
该文件位于内部存储库中,该存储库不可公开访问,如果您的存储库可公开访问,请假定您需要还原的所有内容已被其他人拉下。