无法恢复,因未git add的代码从未进入git对象库;唯一途径是编辑器本地历史、系统临时文件或备份工具。

Mac上执行git reset --hard后发现刚写完但还没git add的代码不见了,git status显示工作区干净,此时Git本身已无法找回这些内容——因为它们从未进入Git对象数据库,reflog、fsck、stash全无效;唯一可行路径是立即转向编辑器本地历史、系统临时文件或备份工具。
先确认丢失内容是否真被Git“记住”了
打开终端,运行git reflog,查看HEAD最近移动记录。如果能看到你reset前的commit哈希(如abc1234 HEAD@{2}: commit: feat/login),说明那次提交还在本地仓库里,只是HEAD被强行拉回去了。
运行git fsck --lost-found,检查是否有孤立的blob或tree对象。如果有输出类似blob d4f8a9c... lost-found/blob/d4f8a9c...,且你记得某次修改的文件名或关键字符串,可用git show d4f8a9c尝试提取内容。
【注意:这一步只对已git add过但未commit的内容有效;如果文件连add都没做过,fsck不会返回任何相关blob】
从编辑器本地历史中抢救未暂存代码
方法一:VS Code用户立刻按Cmd+Shift+P→输入“File: Reopen Closed Editor”或直接打开命令面板搜“Local History”,选择“Show All History”。VS Code默认保存每小时自动快照,只要没关过窗口,大概率能找回。
方法二:IntelliJ / WebStorm用户点击菜单栏File → Local History → Show History,右侧时间轴会列出过去24小时内的所有自动保存点,双击任一节点即可预览并恢复。
方法三:Sublime Text用户需提前安装Local History插件;若未装,则检查~/Library/Application Support/Sublime Text/Packages/User/Local History/目录下是否存在带时间戳的备份文件夹——有就直接复制对应文件出来。
检查系统级残留痕迹
第一步:打开访达,前往~/Library/Caches/com.github.GitHubClient/或~/Library/Caches/git-*目录,查找是否有以.swp、.swo、.un~结尾的临时文件,这类文件通常是Vim/Neovim崩溃时遗留的未写入缓存。
第二步:在终端中执行find ~ -name "*.tmp" -mmin -60 -type f 2>/dev/null | head -n 5,查找过去1小时内创建的临时文件,重点查看项目目录及其父级路径下有没有疑似源码片段的文件。
第三步:检查macOS“文稿”文件夹里的自动保存版本。右键点击原项目文件(如main.js)→显示简介→下滑到底部点开版本标签页,若有灰色“自动保存的版本”,点进去还原。
用Git stash抢救尚未add但已保存的文件
如果你在执行git reset --hard之前,文件已经用编辑器保存过(即磁盘上有最新内容),但没git add,可以立刻运行:
git stash push -u
这个命令会把所有未跟踪文件(包括新创建的.js、.py等)一起打包进stash栈,即使当前工作区看似“干净”,只要文件还存在于磁盘且未被覆盖,就能捕获到。
执行后马上用git stash list确认是否生成了stash条目,再用git stash pop还原。如果pop失败,用git stash show -p stash@{0}直接查看差异内容,手动复制关键代码段。











