我第一次提交到git存储库;然后我后悔提交并想要恢复它。我试着
# git reset --hard HEAD~1
我得到了这样的信息:
fatal: ambiguous argument 'HEAD~1': unknown revision or path not in the working tree.
此提交是存储库的第一次提交。知道如何撤销git的初始提交吗?
我第一次提交到git存储库;然后我后悔提交并想要恢复它。我试着
# git reset --hard HEAD~1
我得到了这样的信息:
fatal: ambiguous argument 'HEAD~1': unknown revision or path not in the working tree.
此提交是存储库的第一次提交。知道如何撤销git的初始提交吗?
当前回答
我会把最后对我有用的东西讲出来。 我需要删除存储库上的初始提交,因为隔离的数据被放错了地方,提交已经被推送。
确保你现在在正确的分支上。
Git checkout master
git update-ref -d HEAD
git commit -m初始提交
Git push -u origin master
这就解决了问题。
重要的
这是一个内部存储库,它是不可公开访问的,如果你的存储库是可公开访问的,请假设你需要恢复的任何东西已经被其他人拉下来。
其他回答
从技术上讲,要恢复最初的提交,你需要做:
git revert HEAD
但是,由于这记录了一个新的提交,它会逆转上次提交的影响,您不妨自己进行一个新的提交,以修复最初提交所引入的问题。这样,您就可以保持最初的提交(即,您可以保持历史记录不变),这是您可能想要做的(特别是如果,例如,您已经推送到共享存储库)。否则,你可能更愿意重新开始。即,删除存储库并创建一个新的存储库。
这个问题的链接来自这篇博客文章,并且针对新版本的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 update-ref -d HEAD
git rm --cached . -r
第一行是CB Bailey建议的(不确定为什么第二行是必要的,但是git直到我这样做了才取消提交文件-我可以通过在上面的第二行之前和之后运行git状态来判断)
你可以删除HEAD并将你的存储库恢复到一个新的状态,在那里你可以创建一个新的初始提交:
git update-ref -d HEAD
在你创建一个新的提交后,如果你已经推送到远程,你将需要强制它到远程,以覆盖之前的初始提交:
git push --force origin
我想知道为什么@damkrat不建议使用“修正”,而且已经把它划掉了,因为修正在我看来是最有效地解决修正错误提交的潜在问题的正确方法,因为没有初始提交是没有目的的。正如一些人强调的那样,如果没有人克隆你的repo,你应该只修改“公共”分支…
git add <your different stuff>
git commit --amend --author="author name <author.name@email.com>"-m "new message"