如何撤销Git对未提交更改执行的回滚操作?
Git未提交变更被误回滚后的恢复方法
能否恢复取决于你的变更是否曾经进入过Git的暂存区,两种场景对应不同的处理方案:
场景1:变更曾经执行过git add暂存
这种情况可以通过Git的底层命令直接找回,操作步骤如下:
- 在仓库根目录执行命令:
git fsck --lost-found
该命令会扫描Git数据库中所有未被分支、标签、提交引用的悬空对象,所有你曾经暂存过的文件内容都会被导出到仓库的.git/lost-found/other/目录下 - 进入
.git/lost-found/other/目录,目录内的文件以内容哈希值命名,你可以通过git show <文件哈希名>或者直接用文本编辑器打开文件,逐一匹配你丢失的变更内容,找到后复制内容到对应的工作文件即可。
场景2:变更从未执行过git add暂存
这种情况Git本身没有留存任何变更的备份记录,只能通过操作系统或第三方工具的缓存恢复:
- 如果你使用VSCode、IntelliJ系IDE、Eclipse等主流开发工具,可以直接打开工具的本地历史记录功能,绝大多数IDE都会自动留存文件的本地修改快照,不需要Git提交也能找回指定时间点的修改内容
- 如果你开启了操作系统的自动备份功能(Windows文件历史、macOS时间机器、Linux Timeshift等),可以通过备份快照回滚对应文件到删除操作之前的版本
- 以上方式都无效的情况下,可以尝试用专业数据恢复软件扫描仓库所在的磁盘分区,成功率取决于删除操作之后该分区有没有新的写入操作覆盖原文件的磁盘扇区。
提示:执行所有恢复操作前请先完整备份当前的仓库目录,避免操作失误造成二次数据丢失,恢复操作越快执行成功率越高。
内容的提问来源于stack exchange,提问作者Jon Erickson
相关产品推荐
相关产品推荐

