因为用错git reset又双叒叕被diss了

271 阅读3分钟

前情提要

今天新来的实习生小A又双叒叕被骂了。

事情是这样的:这哥们儿吭哧吭哧写了三天代码,反手一个 "git reset --hard HEAD~3",然后对着空荡荡的IDE界面露出了蒙娜丽莎の微笑。

image.png

隔壁老张瞥了一眼直接蚌埠住了:"兄弟,你代码呢?你commit都没push直接reset --hard?你是这个👍

reset三连警告⚠️

① --hard:删库跑路版

这玩意儿堪比rm -rf /*,直接给你:

当前改动的代码:扬了

暂存区的文件:扬了

commit记录:扬了

(此时你的代码就像分手后的聊天记录,只能靠git reflog找回忆)

image.png

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

image.png

兄弟别慌!只要硬盘没炸,就有救!

一、抢救黄金三分钟⏱️

1.如果你曾经git add过(哪怕一次!)

直接掏出祖传咒语:

git fsck --lost-found  

这条命令会扫描git垃圾堆,找到所有被删除但没清理的代码碎片,去.git/lost-found目录翻垃圾桶吧!

  1. 如果你连git add都没按过(彻底裸奔)

试试IDE的后悔药:

  • IntelliJ/VSCode:右键文件 -> Local History -> Show History(相当于代码时光机)

3. 终极玄学操作

如果以上全跪,试试:

立刻关闭IDE(防止缓存被覆盖)

用DiskGenius/Recuva扫硬盘(专治手贱30年)

搜索.git/index.lock或临时文件(文件名带~的) (此时你的表情≈在垃圾场里找结婚戒指)

image.png

二、预防暴毙指南🛡️

  1. 日常保命三件套
  • 改代码前先git stash(相当于给代码上保险)

  • 每天下班前git commit --allow-empty -m "下班存档点"(空提交也要留火种)

  • 装个oh-my-zsh,命令行提示当前分支有没有未提交改动(红字警告!)

2. 高危操作前发毒誓

执行reset --hard前必须:

  1. 确认当前分支没有未commit代码
  2. 打开微信给同事发条消息:"哥我要reset了,出事了求捞"
  3. 双手合十默念三遍《大悲咒》

image.png

三、灵魂总结🪦

能不能找回代码,取决于:
✅ 你git add过吗? → 能救
✅ IDE开本地历史了吗? → 能救
🚫 纯裸奔+没开历史+硬盘覆盖 → 建议重写(并购买《颈椎病康复指南》)

记住:

用reset --hard一时爽,一直用一直火葬场

最后送上经典复读:

改代码不commit, 等于上厕所不冲水。 —— 某被reset坑到通宵的倒霉蛋

② --mixed:自欺欺人版

(默认选项,老六的最爱)

假装回退但留着改动的代码,结果下次commit时:

"我超我昨天改的登录页怎么全没了??"

"你特么是不是没add直接reset了?"

典中典之《薛定谔的代码》

image.png

③ --soft:备胎拯救版

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

image.png

史诗级翻车现场🚑

案例1:某摸鱼侠用reset覆盖了同事刚push的feature分支,第二天全组人pull代码后集体表演《消失的API》

案例2:测试环境突然报错,新人试图reset回稳定版本,结果把生产环境数据库配置一起带走了(寄!)

经典咏流传:git push -f + reset组合技,直接达成"一人干活,全组陪葬"成就

image.png

求生指南📖

  • 保命口诀:reset前先git stash,就像打架前存个档
  • 后悔药配方:git reflog找commitID,git reset --hard 救命ID
  • 终极奥义:用git revert生成反向commit,安全得就像给代码穿防弹衣

老板再也不用担心我删库跑路了

灵魂拷问💡

下次想用reset的时候问问自己:

  1. 我本地commit了吗?
  2. 我push了吗?
  3. 我准备好跑路去缅甸了吗?
    如果三个都是否,请自觉把手指从键盘上挪开!

总结

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