【问题标题】:Restore deleted directory that was never committed恢复从未提交的已删除目录
【发布时间】:2012-11-20 15:45:58
【问题描述】:

我不小心将本地目录添加到本地 Git 存储库中。

git add dirName

它在该目录中添加了大约 20 个文件。我不想添加它们。它们以前从未添加过,我也没有提交它们。相反,我删除了它们:

git rm -rf dirName

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

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

【问题讨论】:

    标签: git restore


    【解决方案1】:

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

    您是否尝试过运行git fsck 来检索一些悬垂的斑点悬垂的树

    $ 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
    

    【讨论】:

    • 这应该是真正的答案
    • 这对于文件是正确的,但问题是对于目录。对于目录,它不起作用,因为您必须知道目录结构。
    【解决方案2】:

    没有,因为

    git rm -rf dirName
    

    就像

    rm -rf dirName
    

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

    【讨论】:

    • 我担心可能是这种情况。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多