GitHub新手误执行git rm -r <mydirectory>丢失代码,求助恢复
别慌!你的代码大概率能找回来
作为踩过同样坑的开发者,我完全懂你误删代码时的崩溃——先稳住,Git其实留了不少后路,咱们一步步来:
第一步:从Git历史快照恢复(最直接的方法)
如果那些丢失的文件曾经被提交过(哪怕是没推到远程的临时提交),直接从历史里捞回来就行:
- 先查找包含这个目录的所有历史提交:
这个命令会列出所有涉及该目录的提交记录,找到你丢失工作对应的最新commit哈希值(比如git log --all -- <mydirectory>a1b2c3d)。 - 把该提交里的目录恢复到当前工作区:
执行完这个命令,你丢失的文件应该就回到工作区了。git checkout <commit-hash> -- <mydirectory>
第二步:如果没提交过?试试Git的“丢失和找回”工具
如果那些未备份的工作还没来得及提交,但曾经被git add到暂存区过,或者Git在操作时自动生成了快照,用git fsck能帮你找到这些“孤儿”对象:
- 先运行命令扫描所有未被引用的Git对象:
这个命令会在git fsck --lost-found.git/lost-found/objects目录下生成一堆以哈希命名的文件,这些就是Git悄悄保留的临时快照。 - 逐个查看这些对象的内容,找到你需要的文件:
比如你看到某个对象是你要的Swift文件内容,就可以把它导出:git cat-file -p <哈希值>git cat-file -p <哈希值> > 你要恢复的文件名.swift
重要警告:现在别乱操作!
在完成恢复之前,绝对不要执行git commit、git add、git reset --hard这类会修改Git数据库的命令,避免覆盖掉还能恢复的临时对象。
最后给你提个醒(血的教训)
以后要撤销提交,千万别用git rm -r这种暴力操作:
- 要撤销最近n个提交(保留工作区文件):用
git reset HEAD~n - 要彻底撤销最近n个提交(清空工作区):用
git reset --hard HEAD~n - 如果已经推送到远程仓库,更推荐用
git revert生成反向提交,避免影响协作的小伙伴。
内容的提问来源于stack exchange,提问作者multiverse
相关产品推荐
相关产品推荐

