我做了:
git init git add . git rm -rf dirname
看看其他应答器,git reset --hard HEAD、git checkout -f和git reflog不起作用,显然是因为没有HEAD可返回,也没有提交可从中获取文件。有办法把文件拿回来吗?
git reset --hard HEAD
git checkout -f
git reflog
efzxgjgh1#
-n
git prune
也许有一种方法,使用git prune和git cat-file。运行git prune -n将列出哪些对象将通过修剪删除:
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-从对象数据库中删除所有无法访问的对象选项
mtb9vblg2#
不可能的。通常,git rm会在删除文件之前检查文件是否已经提交,这样你就不会丢失任何工作。然而,使用-f会忽略这个检查。简而言之:
git rm
-f
q35jwt9p3#
如果你还没有提交,你可以通过执行以下操作来恢复目录:
git stash git stash pop git co dirname
xn1cxnb44#
不,据我所知。我相信git会解除文件链接,就像rm -rf一样。它是否知道这些文件并不重要,它会很乐意破坏目录。真的,你唯一的办法是尝试使用文件恢复工具,就好像你 * 已经 * 完成了rm -rf一样
rm -rf
aiqt4smr5#
如果git没有跟踪dirname目录,它将不允许删除包含git rm -rf的目录,因为它不知道这个目录。
dirname
git rm -rf
fatal: pathspec 'dirname' did not match any files
唯一可以删除的方法是在git init之后执行git add .或git add dirname。如果是这种情况,你的文件就消失了,你无法找回它们,因为它从未被提交过,git也不会跟踪它。这就像在普通文件夹上执行rm -rf一样(除非你有备份,否则无法恢复)
git init
git add .
git add dirname
qyyhg6bp6#
git reset --hard在删除尚未提交时提供帮助,一般来说,删除被Ctrl+Z中断
git reset --hard
Ctrl+Z
iyr7buue7#
git stash是对我有效的命令。
vs3odd8k8#
第一种类型“git stash”然后是“git stash pop”之后你将看到一个删除文件的列表.复制文件名一个接一个并且使用“git restore filename...”放弃工作目录中的更改
8条答案
按热度按时间efzxgjgh1#
-n
选项(1)的git prune
将擦除您无法访问的数据。也许有一种方法,使用
git prune
和git cat-file
。运行
git prune -n
将列出哪些对象将通过修剪删除:每行对应一个已删除的文件。
现在,使用
git cat-file
,我们能够将删除文件的内容恢复到一个新文件:(1)来自
git prune
文档:姓名
git-prune-从对象数据库中删除所有无法访问的对象
选项
不要移动任何东西;只报告它会移除什么。
mtb9vblg2#
不可能的。
通常,
git rm
会在删除文件之前检查文件是否已经提交,这样你就不会丢失任何工作。然而,使用-f
会忽略这个检查。简而言之:
-f
。q35jwt9p3#
如果你还没有提交,你可以通过执行以下操作来恢复目录:
xn1cxnb44#
不,据我所知。我相信git会解除文件链接,就像
rm -rf
一样。它是否知道这些文件并不重要,它会很乐意破坏目录。真的,你唯一的办法是尝试使用文件恢复工具,就好像你 * 已经 * 完成了rm -rf
一样aiqt4smr5#
如果git没有跟踪
dirname
目录,它将不允许删除包含git rm -rf
的目录,因为它不知道这个目录。唯一可以删除的方法是在
git init
之后执行git add .
或git add dirname
。如果是这种情况,你的文件就消失了,你无法找回它们,因为它从未被提交过,git也不会跟踪它。这就像在普通文件夹上执行rm -rf
一样(除非你有备份,否则无法恢复)qyyhg6bp6#
git reset --hard
在删除尚未提交时提供帮助,一般来说,删除被Ctrl+Z
中断iyr7buue7#
git stash是对我有效的命令。
vs3odd8k8#
第一种类型“git stash”
然后是“git stash pop”
之后你将看到一个删除文件的列表.复制文件名一个接一个并且使用
“git restore filename...”放弃工作目录中的更改