我第一次向git仓库提交;然后我对这个承诺感到后悔,并希望恢复它。我尝试如何恢复初始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 branch -D
,因为这样做有安全检查。您可以使用update-ref
来执行此操作。
git update-ref -d HEAD
做不使用rm -rf .git
或类似这样的,因为这将事情彻底消灭整个仓库在内的所有其他部门,以及您尝试重置分支。
最简单的方法是:
rm -fr .git
从那里你做git init
的目录。
你什么都不想保留,所以你不会失去任何东西。但是,只有在您的存储库中没有任何东西存在时,才能做到这一点。在问题'首次提交存储库—然后后悔'的情况下,它是安全的。但是,很多时候,这并不安全。
这是不好的建议。如果回购中还有其他不想丢失的东西呢? –
那么它不会是最初的提交,会吗?只有一个初始提交。 –
“那么它不会是最初的承诺” - 实际上,是的。你忽略了多个分支的常见情况。查看Charles的答案。 –
你不能。所以:
rm -rf .git/
git init
git add -A
git commit -m 'Your new commit message'
他试图说'git reset --hard',那么他为什么要'git add -A'? –
的git的复位 - 硬 进行更改,然后做
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 update-ref -d HEAD
后您创建一个新的提交,如果你已经被推到远程的,则需要将其强制远程为了覆盖以前的初始承诺:
git push --force origin
值得注意的是...这是正确的命令,但它并不删除HEAD ...它删除了.git \ HEAD文件已经签出的ref(位于.git \ refs \ heads下)。运行此命令后,仍然可以找到指向您删除的refs/heads/
这个问题是从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 revert {commit_id}'
然后将其推
git push origin -f
在rebase中尝试了这个 - 想分割第一次提交 - 然后做了'git status',令我惊讶的是,git说'致命的:不是git存储库(或任何父母直到挂载点... )'! –
相同 - 解决方案? –
这不适合我。使文件包括一些应该被忽略但不包含'.gitignore'的文件。 'git add .','git commit -m'initial commit'','git update-ref -D HEAD',创建一个'.gitignore',注意git仍然看到它之前添加的应该忽略的文件。换句话说'git update-ref -d HEAD'并没有把我带回初始提交之前的状态。 – gman