恢复从未提交的已删除目录

时间:2012-11-20 15:45:58

标签: git restore

我不小心将本地目录添加到我当地的Git仓库。

git add dirName

它在该目录中添加了20个左右的文件。我不希望他们添加。以前从未添加过它们,我没有提交它们。相反,我用以下内容删除了它们:

git rm -rf dirName

这成功地从repo中删除了它们,但令我沮丧的是,该目录似乎也已从磁盘中删除。它们不在我的回收站中。

有没有办法让这些文件恢复?当然,我有备份,但自上次备份以来,我对文件做了很多更改。

2 个答案:

答案 0 :(得分:6)

我不认为接受的答案是完全准确的。确实git rm从索引中删除了文件,但它们通常会在Git的对象数据库中保留一段时间。除非你强制进行垃圾收集,否则就是这样。

您是否尝试过运行git fsck来检索一些悬空blob 摇晃树

$ git init test
Initialized empty Git repository in D:/DOCUME~1/T012345/LOCALS~1/Temp/test/.git/

$ echo baz > foo/bar.txt

$ git add -Av
add 'foo/bar.txt'

$ git rm -rf *
rm 'foo/bar.txt'

$ git fsck
notice: HEAD points to an unborn branch (master)
Checking object directories: 100% (256/256), done.
notice: No default references
dangling blob 76018072e09c5d31c8c6e3113b8aa0fe625195ca

$ git cat-file -p 76018072e09c5d31c8c6e3113b8aa0fe625195ca
baz

答案 1 :(得分:0)

没有,因为

git rm -rf dirName

就像

rm -rf dirName

这也是不可逆转的,但它也会删除暂存文件,因此无法恢复文件。下次使用git rm --cached dirName,它只会从舞台而不是光盘中删除它。