我还有另一个做的例子git rm -rf
没有初始提交。 (我意识到我添加了很多无用的文件,并且想添加一些过滤器。)
现在我只剩下 23000 个悬空的 blob,没有树,但有完整的 Git 历史记录!
我将使用一个脚本来循环 blobnames(使用git show 'blobname' > 'filename'
),但是我可以将历史记录中的这些文件名与 blob 关联起来吗?
对于所有犯过/将会犯我所犯错误的人来说,故事到这里就结束了。
首先,简单总结一下我所做的事情。
- 创建了一个空的存储库
- 将许多文件/目录移至其中
-
gid add .
- 意识到我刚刚添加了大量无用/不那么重要/冗余的文件
-
git rm -rf
目的是在 .gitignore 中添加一些过滤器
- 发现我所有的文件都消失了...
我尝试了各种数据恢复工具;没有运气。
我能做的最好的就是以下过程。
- 立即将工作目录复制到不同的卷
(外部高清)。
-
git fsck --lost-found
可能与--unreachable --cache
这将创建文件夹.git/lost-found/other
与所有(大多数?)
原始文件被重新创建,但没有文件名。现在的问题是
如何恢复文件名。不幸的是,我恢复的所有文件都是 blob,没有根,所以我没有有关目录树结构的信息。
- 尽管我有丢失文件名的完整列表(只有名称,没有大小),但我找不到任何根,所以这些信息基本上没有用。
- 一般来说,我们可以编写一个脚本来使用
file
查看文件的类型(file <filename>
),并附加相应的扩展名。文件与文件名匹配的问题仍然存在。
另一种方法是使用蛮力。例如,为了恢复 pdf,我按长度对恢复的文件进行排序,附加 .pdf 扩展名,然后逐一查看它们。真正的 pdf 文件显示了一些内容,而其他文件则没有。
- 为了恢复基于文本的文件(txt、tex、c、h..),我使用了 grep,查找我记得属于特定(组)文件的字符串。
- 现在,我保留了包含所有丢失恢复文件的目录,每次需要其中一个文件时,我都会使用项目符号 4 的一个轻微变体。
祝你好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)