如何恢复“git rm -r”?
我偶然说过git rm -r .  。 我如何从这恢复? 
我没有犯。
我认为所有的文件都被标记为删除,也从我的本地结账中删除。
  编辑:我可以(如果我知道的命令)恢复到最后一次提交。 但是如果我能够撤销git rm -r .会好很多git rm -r .  。 因为我不确定我在最后一次提交之后和git rm -r .之前做了什么git rm -r .  。 
 git reset HEAD 
应该这样做。 如果你没有任何你不在乎的改变,那么
 git reset --hard HEAD 
 应该强行把所有事情都重置到你最后一次提交。 如果您确实有未提交的更改,但第一个命令不起作用,请使用git stash保存未提交的更改: 
 git stash git reset --hard HEAD git stash pop 
在我下一次提交之前,我发现了一些文件,并继续进行修改,当时我意识到我需要恢复这些文件。 而不是隐藏和重置,您可以简单地签出您错过/删除的单个文件,如果您想要:
 git checkout HEAD path/to/file path/to/another_file 
这会使您的其他未提交的更改完整无缺,无任何解决方法。
要重新获得一些单个文件或文件夹,可以使用以下内容
 git reset -- path/to/file git checkout -- path/to/file 
 这将首先重新创buildpath/to/file的索引条目,并重新创build上次提交时的文件,即HEAD 。 
  提示:可以将一个提交散列传递给两个命令,以便从较旧的提交中重新创build文件。 请参阅git reset --help和git checkout --help了解详细信息。 
更新:
 因为git rm . 删除工作结帐中以及索引中的此目录和子目录中的所有文件,则需要撤消这些更改中的每一个: 
 git reset HEAD . # This undoes the index changes git checkout . # This checks out files in this and child directories from the HEAD 
这应该做你想要的。 它不会影响签出代码或索引的父文件夹。
旧的答案不是:
 reset HEAD 
将做的伎俩,并不会消除你对你的文件的任何未提交的更改 。
 之后,你需要重复你已经排队的任何git add命令。 
如果最终没有上述工作,您可以使用以下build议检索数据: http : //www.spinics.net/lists/git/msg62499.html
 git prune -n git cat-file -p <blob #> 
如果您已经提交并推送了更改,则可以执行此操作以取回文件
 // Replace 2 with the # of commits back before the file was deleted. git checkout HEAD~2 path/to/file 
已经有一些很好的答案,但是我可能会build议一个不太好用的语法,它不仅非常好用,而且在你想要的内容上非常明确(因此不是可怕的或者神秘的)
 git checkout <branch>@{"20 minutes ago"} <filename> 
获取列表提交
 git log --oneline 
 例如,Stable commit has hash: 45ff319c360cd7bd5442c0fbbe14202d20ccdf81 
 git reset --hard 45ff319c360cd7bd5442c0fbbe14202d20ccdf81 git push -ff origin master 
我有一个相同的情况。 在我的情况下,解决scheme是:
 git checkout -- . 
我有完全相同的问题:清理我的文件夹,重新排列和移动文件。 我input了:git rm 。 然后回车 然后感觉到我的肠子松了一下。 幸运的是,我没有直接inputgit commit -m“”。
但是,下面的命令
 git checkout . 
恢复了一切,拯救了我的生命。