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

我没有承诺。

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

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


当前回答

我也遇到过同样的情况。对我来说,解决方案是:

git checkout -- .

其他回答

git reset HEAD

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

git reset --hard HEAD

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

git stash
git reset --hard HEAD
git stash pop

撤销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 rm -r——cached . xml。在一个没有进行暂存(也就是没有提交)的repo中,你可以使用命令git restore——staging来撤销这个操作(从删除中取消暂存)。

简而言之,撤销git rm -r——cached。你只需要运行git restore - staging。

如果上述方法都不能正常工作,则可以使用这里的建议检索数据: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