如何在没有第一次提交的情况下撤消git rm -rf dirname?

B S*_*ven 10 git commit rm undo delete-file

我做了:

git init
git add .
git rm -rf dirname
Run Code Online (Sandbox Code Playgroud)

综观其他answsers, git reset --hard HEAD,git checkout -fgit reflog没有工作,显然是因为没有文件头回去,也没有提交获取文件从后面.

有没有办法让文件恢复?

And*_*ira 9

警告:在git prune没有-n选项 (1) 的情况下运行将删除您无法访问的数据。

可能有一种方法,使用git prunegit cat-file

运行git prune -n将列出哪些对象将被修剪删除:

$ git prune -n
9cc84ea9b4d95453215d0c26489d6a78694e0bc6 blob
c315143703752ef4d11ca7d93f2c324872b2ebff blob
Run Code Online (Sandbox Code Playgroud)

每行对应一个已删除的文件。

现在,使用git cat-file,我们可以将已删除文件的内容恢复到新文件中:

git cat-file -p 9cc84ea9b4d95453215d0c26489d6a78694e0bc6 > restored-filename
Run Code Online (Sandbox Code Playgroud)

(1)从git prune文档:

名称
git-prune - 从对象数据库中删除所有无法访问的对象

OPTIONS
-n
--dry-run
不要删除任何内容;只需报告它将删除的内容。

  • 这是唯一真正有帮助的答案!谢谢你! (3认同)

Lam*_*iry 8

没有办法.

通常,git rm在删除之前检查文件是否已经提交,这样您就不会丢失任何工作.但是,使用-f覆盖此检查.

简而言之:

  • 不要用-f.
  • 不要碰任何你没有犯过的东西.

  • 就像unix一样 - `-f`意味着你最好确定你在做什么. (2认同)