如何撤销git reset --hard操作恢复被删除的未提交文件
git reset --hard 误删未提交本地文件的恢复方案
你贴出的命令输出卡0%是终端显示错位导致的假象,输出末尾的Checking object directories: 100% (256/256), done.已说明该步骤执行完成,前面的0%进度是冗余错位内容,不影响命令实际执行结果。
恢复前先区分文件类型
不同状态的文件恢复方式完全不同:
1. 曾被git追踪过的文件(至少执行过一次git add或git commit的文件)
- 先执行
git reflog查看操作历史,找到你执行git reset --hard之前的对应commit哈希,无后续操作的话通常对应HEAD@{1} - 如需恢复整个分支到reset之前的状态,执行:
git reset --hard <目标commit哈希> - 如只需恢复单个文件,执行:
git checkout <目标commit哈希> -- <待恢复文件的完整路径> - 如果reflog中找不到目标commit,可执行
git fsck --lost-found扫描悬空对象,执行完成后:- 历史commit快照会存放在
.git/lost-found/commit/目录下 - 曾add到暂存区但未commit的文件快照会存放在
.git/lost-found/other/目录下,可直接将对应文件拷贝出来重命名恢复内容
- 历史commit快照会存放在
2. 从未执行过git add的全新未提交文件
git本身不会存储未进入暂存区的文件快照,无法通过git命令恢复,可尝试以下方式:
- 查看所用IDE的本地历史备份(如VS Code本地历史、JetBrains系列IDE的Local History功能)
- 使用系统级文件恢复工具扫描磁盘恢复
内容的提问来源于stack exchange,提问作者Berk Birkan
相关产品推荐
相关产品推荐

