我不小心说了git rm -r ..我该如何从中恢复呢?
我没有承诺。
我认为所有的文件都被标记为删除,并从我的本地签出中物理删除。
编辑:我可以(如果我知道命令)恢复到上次提交。但如果我能撤销git rm -r ..因为我真的不确定我在最后一次提交之后和git rm -r之前做了什么。
我不小心说了git rm -r ..我该如何从中恢复呢?
我没有承诺。
我认为所有的文件都被标记为删除,并从我的本地签出中物理删除。
编辑:我可以(如果我知道命令)恢复到上次提交。但如果我能撤销git rm -r ..因为我真的不确定我在最后一次提交之后和git rm -r之前做了什么。
当前回答
更新:
因为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 checkout HEAD path/to/file path/to/another_file
这使得其他未提交的更改没有任何变通办法。
如果执行命令git rm -r——cached . xml。在一个没有进行暂存(也就是没有提交)的repo中,你可以使用命令git restore——staging来撤销这个操作(从删除中取消暂存)。
简而言之,撤销git rm -r——cached。你只需要运行git restore - staging。
git reset HEAD
应该这么做。如果您不关心任何未提交的更改,那么
git reset --hard HEAD
应该强制重置您上次提交的所有内容。如果你有未提交的更改,但是第一个命令不起作用,那么用git stash保存你未提交的更改:
git stash
git reset --hard HEAD
git stash pop
已经有了一些很好的答案,但我可能会建议一个很少使用的语法,它不仅工作得很好,而且非常明确地表达了您想要的东西(因此并不可怕或神秘)。
git checkout <branch>@{"20 minutes ago"} <filename>
要重新获得一些单个文件或文件夹,可以使用以下方法
git reset -- path/to/file
git checkout -- path/to/file
这将首先重新创建路径/to/file的索引项,并重新创建上次提交时的文件,即head。
提示:可以向两个命令都传递一个提交哈希来从旧的提交中重新创建文件。详见git reset -help和git checkout -help。