前情提要
今天新来的实习生小A又双叒叕被骂了。
事情是这样的:这哥们儿吭哧吭哧写了三天代码,反手一个 "git reset --hard HEAD~3",然后对着空荡荡的IDE界面露出了蒙娜丽莎の微笑。

隔壁老张瞥了一眼直接蚌埠住了:"兄弟,你代码呢?你commit都没push直接reset --hard?你是这个👍
reset三连警告⚠️
① --hard:删库跑路版
这玩意儿堪比rm -rf /*,直接给你:
当前改动的代码:扬了
暂存区的文件:扬了
commit记录:扬了
(此时你的代码就像分手后的聊天记录,只能靠git reflog找回忆)

那么问题来了,要是使用reset后工作区代码丢掉了怎么办?

兄弟别慌!只要硬盘没炸,就有救!
一、抢救黄金三分钟⏱️
1.如果你曾经git add过(哪怕一次!)
直接掏出祖传咒语:
js
git fsck --lost-found
这条命令会扫描git垃圾堆,找到所有被删除但没清理的代码碎片,去.git/lost-found目录翻垃圾桶吧!
- 如果你连git add都没按过(彻底裸奔)
试试IDE的后悔药:
- IntelliJ/VSCode:右键文件 -> Local History -> Show History(相当于代码时光机)
- 终极玄学操作
如果以上全跪,试试:
立刻关闭IDE(防止缓存被覆盖)
用DiskGenius/Recuva扫硬盘(专治手贱30年)
搜索.git/index.lock或临时文件(文件名带~的) (此时你的表情≈在垃圾场里找结婚戒指)

二、预防暴毙指南🛡️
- 日常保命三件套
-
改代码前先git stash(相当于给代码上保险)
-
每天下班前git commit --allow-empty -m "下班存档点"(空提交也要留火种)
-
装个oh-my-zsh,命令行提示当前分支有没有未提交改动(红字警告!)
- 高危操作前发毒誓
执行reset --hard
前必须:
- 确认当前分支没有未commit代码
- 打开微信给同事发条消息:"哥我要reset了,出事了求捞"
- 双手合十默念三遍《大悲咒》

三、灵魂总结🪦
能不能找回代码,取决于:
✅ 你git add过吗? → 能救
✅ IDE开本地历史了吗? → 能救
🚫 纯裸奔+没开历史+硬盘覆盖 → 建议重写(并购买《颈椎病康复指南》)
记住:
用reset --hard一时爽,一直用一直火葬场
------ 鲁迅《没说过但觉得很有道理》

最后送上经典复读:
改代码不commit, 等于上厕所不冲水。 ------ 某被reset坑到通宵的倒霉蛋
② --mixed:自欺欺人版
(默认选项,老六的最爱)
假装回退但留着改动的代码,结果下次commit时:
"我超我昨天改的登录页怎么全没了??"
"你特么是不是没add直接reset了?"
典中典之《薛定谔的代码》

③ --soft:备胎拯救版
唯一正常人选项,但菜鸡根本分不清:
"我reset完怎么还有这么多改动??"
"因为这是给你重新commit的机会啊淦!"

史诗级翻车现场🚑
案例1:某摸鱼侠用reset覆盖了同事刚push的feature分支,第二天全组人pull代码后集体表演《消失的API》
案例2:测试环境突然报错,新人试图reset回稳定版本,结果把生产环境数据库配置一起带走了(寄!)
经典咏流传:git push -f + reset组合技,直接达成"一人干活,全组陪葬"成就

求生指南📖
- 保命口诀:reset前先
git stash
,就像打架前存个档 - 后悔药配方:
git reflog
找commitID,git reset --hard 救命ID
- 终极奥义:用
git revert
生成反向commit,安全得就像给代码穿防弹衣
老板再也不用担心我删库跑路了
灵魂拷问💡
下次想用reset的时候问问自己:
- 我本地commit了吗?
- 我push了吗?
- 我准备好跑路去缅甸了吗?
如果三个都是否,请自觉把手指从键盘上挪开!
总结
文末附赠《程序员防揍指南》:
当同事怒目圆睁时,请立即背诵:
"哥我错了!这就用revert!奶茶管够!"
(经验值+999,存活几率提升80%)

如果觉得这篇文章对你有所帮助的话,还请点赞、收藏、关注支持一波。