我做了:
git init
git add .
git rm -rf dirname
查看其他答案,git reset --hard HEAD
,git checkout -f
和git reflog
不起作用,显然是因为没有HEAD可以返回,也没有提交文件。
有没有办法让文件恢复?
答案 0 :(得分:9)
没有办法。
通常,git rm
会在删除之前检查已提交的文件,因此您不会丢失任何工作。但是,使用-f
会覆盖此检查。
简而言之:
-f
。答案 1 :(得分:2)
警告:在没有git prune
选项的情况下运行-n
(1)将清除您无法访问的数据。
可能有一种方法,使用git prune
和git cat-file
。
运行git prune -n
将列出通过修剪删除哪些对象:
$ git prune -n
9cc84ea9b4d95453215d0c26489d6a78694e0bc6 blob
c315143703752ef4d11ca7d93f2c324872b2ebff blob
每一行对应一个已删除的文件。
现在,使用git cat-file
,我们可以将删除的文件的内容恢复为新文件:
git cat-file -p 9cc84ea9b4d95453215d0c26489d6a78694e0bc6 > restored-filename.whatever
(1)来自git prune
文档:
NAME
git-prune - 修剪对象数据库中所有无法访问的对象
选项
-n
--dry运行
不要移除任何东西;只需报告它会删除的内容。
答案 2 :(得分:1)
据我所知,没有。我相信git取消链接文件,就像执行rm -rf
一样。它是否知道文件并不重要,它很乐意核对目录。实际上,您唯一的办法就是尝试使用文件恢复工具,就好像 已完成rm -rf
答案 3 :(得分:1)
git reset --hard
帮助了删除尚未提交,一般来说,删除被Ctrl+Z
答案 4 :(得分:0)
如果git没有跟踪dirname
目录,它将不允许您删除git rm -rf
目录,因为它不知道它。你会(会)得到像
fatal: pathspec 'dirname' did not match any files
如果您在git add .
之后完成了git add dirname
或git init
,那么您唯一可以删除的方式就是。如果是这种情况,你的文件就会消失,你无法将它们取回,因为它从未被提交过,而git也没有跟踪它。它与在普通文件夹上执行rm -rf
一样好(除非你有备份,否则无法恢复)
答案 5 :(得分:0)
如果尚未提交,可以执行以下操作恢复目录:
git stash
git stash pop
git co dirname