我不小心说了git rm -r ..我该如何从中恢复呢?
我没有承诺。
我认为所有的文件都被标记为删除,并从我的本地签出中物理删除。
编辑:我可以(如果我知道命令)恢复到上次提交。但如果我能撤销git rm -r ..因为我真的不确定我在最后一次提交之后和git rm -r之前做了什么。
我不小心说了git rm -r ..我该如何从中恢复呢?
我没有承诺。
我认为所有的文件都被标记为删除,并从我的本地签出中物理删除。
编辑:我可以(如果我知道命令)恢复到上次提交。但如果我能撤销git rm -r ..因为我真的不确定我在最后一次提交之后和git rm -r之前做了什么。
当前回答
我有完全相同的问题:清理我的文件夹,重新安排和移动文件。我输入:git rm。按回车键;然后我觉得我的肠子松了一点。幸运的是,我没有立即输入git commit -m ""。
但是,下面的命令
git checkout .
恢复了一切,救了我的命。
其他回答
已经有了一些很好的答案,但我可能会建议一个很少使用的语法,它不仅工作得很好,而且非常明确地表达了您想要的东西(因此并不可怕或神秘)。
git checkout <branch>@{"20 minutes ago"} <filename>
获取列表提交
git log --oneline
例如,稳定提交的哈希值为:45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git reset --hard 45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git push -ff origin master
撤销git rm
git rm file # delete file & update index
git checkout HEAD file # restore file & index from HEAD
撤销git rm -r
git rm -r dir # delete tracked files in dir & update index
git checkout HEAD dir # restore file & index from HEAD
撤销git rm -rf
git rm -r dir # delete tracked files & delete uncommitted changes
not possible # `uncommitted changes` can not be restored.
未提交的更改包括非阶段性更改,阶段性更改但未提交。
我也遇到过同样的情况。对我来说,解决方案是:
git checkout -- .
git reset HEAD
应该这么做。如果您不关心任何未提交的更改,那么
git reset --hard HEAD
应该强制重置您上次提交的所有内容。如果你有未提交的更改,但是第一个命令不起作用,那么用git stash保存你未提交的更改:
git stash
git reset --hard HEAD
git stash pop