未执行初始提交的新git仓库中被删除的文件如何恢复?
Git未初始提交时执行git rm -rf后的文件恢复方法
你执行过git add .操作后,所有暂存过的文件都会以blob对象形式存储在.git目录下,只要没有执行git gc清理悬空对象,文件就没有永久丢失。
你之前执行的git checkout .和git reset无法生效,是因为此时还未生成任何提交记录,这两个命令都依赖已有提交作为恢复基准,因此无效果。
具体恢复步骤
- 第一步:暂停当前仓库的所有写入操作,不要新增文件、执行新的git add/commit/gc等操作,避免原有存储的文件对象被覆盖。
- 第二步:在仓库根目录执行命令:
git fsck --lost-found
这个命令会扫描仓库中所有悬空(未被提交/分支引用)的对象,将找到的blob文件全部写入.git/lost-found/other目录下。 - 第三步:进入
.git/lost-found/other目录恢复文件
该目录下的文件以Git哈希值命名,无原始文件名与后缀,你可以根据文件内容识别:- 文本类文件可直接打开查看内容,匹配到对应文件后修改回原始文件名和后缀即可
- 二进制类文件(图片、文档等)可根据文件头部特征判断格式,修改对应后缀后打开验证
特殊情况说明
如果你之前执行过git gc这类清理冗余对象的命令,悬空的blob对象可能被永久清理,这种情况下无法通过Git本身恢复文件,需要尝试使用磁盘级的数据恢复工具扫描磁盘分区找回。
内容的提问来源于stack exchange,提问作者Henry
相关产品推荐
相关产品推荐

