Mac端退出VSCode后单个文件修改丢失如何找回
遍历全量stash条目匹配目标修改
很多时候git stash pop默认只取最新的stash条目,如果你之前多次执行过stash,目标修改可能存在更早的stash里。先执行git stash list打印所有历史stash记录,每条记录格式为stash@{序号}: WIP on 分支名: 提交哈希 提交说明。对每个条目执行git stash show -p stash@{序号}查看完整修改内容,找到包含目标文件修改的条目后,执行git stash apply stash@{序号}即可将修改恢复到工作区。优先用apply而非pop,apply不会在应用修改后删除stash条目,避免操作失误导致stash内容永久丢失。检索Git悬空对象找回未被引用的修改
如果stash中没有找到对应修改,大概率是执行stash时相关修改没有被Git纳入stash范围,但Git已经为曾经写入过的文件内容生成过blob对象。执行git fsck --lost-found,命令运行完成后,所有未被提交、stash等引用的文件内容块都会被导出到项目路径下的.git/lost-found/other/目录,文件名为Git生成的哈希值。如果记得修改内容中的特定关键词,执行grep -r "记忆中的修改关键词" .git/lost-found/other/即可快速定位到对应文件;如果不记得关键词,逐个执行git cat-file -p 哈希值查看文件内容,匹配到目标修改后,将文件重命名为原文件名放回项目对应路径即可恢复。读取VSCode本地历史记录
VSCode默认开启本地历史功能,哪怕Git完全没有记录相关修改,只要你在编辑器中保存过文件,就会留存历史版本。你可以直接在VSCode中打开被回退的目标文件,右键点击编辑器顶部的文件标签,选择「打开时间线」,侧边栏会列出所有按时间排序的本地历史版本,点选版本即可对比内容,找到退出前的最新版本直接恢复即可。也可以直接打开项目根目录下的隐藏文件夹.history,里面按时间戳命名存储了所有编辑过的文件版本,找到对应时间点的目标文件复制覆盖工作区文件即可。提取VSCode异常退出备份缓存
如果以上方法都没找到,直接去VSCode的全局备份目录检索异常退出时留存的缓存:- Windows系统路径:
%APPDATA%\Code\Backups - macOS系统路径:
~/Library/Application Support/Code/Backups - Linux系统路径:
~/.config/Code/Backups
进入目录后按文件修改时间排序,找到退出VSCode时间点附近的文件,打开确认内容后提取目标修改即可。
- Windows系统路径:
执行所有恢复操作前,建议先把当前工作区的现有内容复制一份做全量备份,避免操作失误造成内容二次丢失
内容的提问来源于stack exchange,提问作者user19441036

