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