我认命说git rm -r .
。我该如何恢复?如何恢复“git rm -r。”?
我没有提交。
我认为所有的文件都被标记为删除,并且也从我的本地结帐中物理删除。
编辑:我可以(如果我知道命令)恢复到上次提交。但如果我可以撤消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 reset --hard HEAD'会破坏您在当前工作目录的父目录中所做的任何有用更改。 – 2010-02-05 14:41:50
此主题只是防止即将发生的心脏病发作。 – 2011-04-07 11:47:32
@Mild:我还是穿着冷汗! – hoipolloi 2011-08-04 21:00:23
更新:
由于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
命令。
'co'就是'checkout' – DanSkeel 2012-05-10 23:52:22
对不起,我总是设置'git alias .co =“checkout”'这样'git co'确实签出。 – 2012-06-14 22:53:50
我混帐rm'd几个文件,去之前我下进行更改时提交我意识到我需要回来一些这些文件。而不是藏匿和复位,你可以,如果你想简单地签删除你错过了单独的文件/:
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 #>
你已经救了我 – Bear 2014-12-22 11:04:48
4年后,依然是救命恩人! – ThievingSix 2016-09-18 06:23:19
诀窍! – 2017-02-22 13:54:02
要恢复一些单个文件或文件夹,一个可以使用以下
git reset -- path/to/file
git checkout -- path/to/file
这将首先重新创建path/to/file
的索引条目,并重新创建上次提交时的文件,即HEAD
。
提示:可以将一个提交散列传递给两个命令以从较旧的提交重新创建文件。有关详细信息,请参阅git reset --help
和git checkout --help
。
有一些很好的答案了,但我可能会建议一个很少使用的语法,不仅伟大工程,但非常明确的想要什么(为此不可怕或神秘)
git checkout <branch>@{"20 minutes ago"} <filename>
我一个相同的情况。在我的情况的解决方案是:
git checkout -- .
如果你致力于推的变化,你可以做到这一点得到回文件
// Replace 2 with the # of commits back before the file was deleted.
git checkout HEAD~2 path/to/file
我一模一样的问题:被清理我的文件夹,重新安排和移动文件。我输入了:git rm 。并按回车键;然后感觉到我的肠子松了一下。幸运的是,我没有直接输入git commit -m“”。
但是,下面的命令
git checkout .
恢复一切,救了我的命。
获取列表提交
git log --oneline
例如稳定的承诺具有散:45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git reset --hard 45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git push -ff origin master
这对我有效,谢谢 – 2017-04-18 17:45:53
撤消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室射频
git rm -r dir # delete tracked files & delete uncommitted changes
not possible # `uncommitted changes` can not be restored.
Uncommitted changes
包括not staged changes
,staged changes but not committed
。
当然,没有任何东西可以撤销'git rm -rf',因为这可能会删除未跟踪或已暂存(仅)的文件。 – jpaugh 2018-02-05 18:28:01
'git rm -rf file'和'git rm -rf dir'不会删除任何未跟踪的文件。 – 2018-02-06 02:24:30
对于这个特定的问题,重置--hard是一个很好的解决方案...它已经列出,所以我只是在这个评论中提到你可能想要检查git-reflog的文档。 – 2010-01-24 05:42:51
请注意,因为您没有为'git rm'提供'-f',所以git不会删除任何已经执行或未执行更改的文件,所以'git reset; git checkout .'应该可以恢复所有的东西。 – 2010-01-24 08:47:16
只要小心 - git结帐。将消灭所有未分离的变化。 – PeterB 2011-10-11 15:30:27