我不小心说了git rm -r ..我该如何从中恢复呢?

我没有承诺。

我认为所有的文件都被标记为删除,并从我的本地签出中物理删除。

编辑:我可以(如果我知道命令)恢复到上次提交。但如果我能撤销git rm -r ..因为我真的不确定我在最后一次提交之后和git rm -r之前做了什么。


当前回答

我有完全相同的问题:清理我的文件夹,重新安排和移动文件。我输入:git rm。按回车键;然后我觉得我的肠子松了一点。幸运的是,我没有立即输入git commit -m ""。

但是,下面的命令

git checkout .

恢复了一切,救了我的命。

其他回答

更新:

因为git rm。删除工作签出中的this和子目录以及索引中的所有文件,你需要撤消这些更改:

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命令。

git reset HEAD

应该这么做。如果您不关心任何未提交的更改,那么

git reset --hard HEAD

应该强制重置您上次提交的所有内容。如果你有未提交的更改,但是第一个命令不起作用,那么用git stash保存你未提交的更改:

git stash
git reset --hard HEAD
git stash pop

我有完全相同的问题:清理我的文件夹,重新安排和移动文件。我输入:git rm。按回车键;然后我觉得我的肠子松了一点。幸运的是,我没有立即输入git commit -m ""。

但是,下面的命令

git checkout .

恢复了一切,救了我的命。

我收集了一些文件,并在下次提交之前继续修改,这时我意识到我需要其中一些文件。而不是隐藏和重置,你可以简单地签出你错过/删除的个别文件,如果你想:

git checkout HEAD path/to/file path/to/another_file

这使得其他未提交的更改没有任何变通办法。

如果上述方法都不能正常工作,则可以使用这里的建议检索数据:http://www.spinics.net/lists/git/msg62499.html

git prune -n
git cat-file -p <blob #>