《Git 踩坑记:一次误操作差点删掉三天的代码》
记录一次让我后背发凉的 Git 事故,以及之后总结的经验。
事故经过
上周三,我在一个功能分支上写了三天的代码。当时想切换回主分支看个东西,随手敲了:
git checkout main
结果 Git 提示有未提交的修改,我没细看,直接上了 --force 的心思,先执行了:
git stash
然后鬼使神差地执行了:
git stash drop
当场傻眼——stash 列表空了,三天的修改看起来“消失”了。
抢救过程
冷静下来后想起一个知识点:Git 几乎不会真正删除数据,drop 只是把引用删了,对象还在。
找到被 drop 掉的 stash 记录
git fsck --unreachable | grep commit
会列出一堆“不可达”的 commit,挨个查看:
git show 一长串hash值
找到目标后恢复:
git stash apply 那个hash
三天的代码,失而复得。那一瞬间对 Git 的敬畏之心拉满。
三条教训
任何删除性操作前,先 git stash list 看一眼,确认操作对象;
改动到一半也要勤 commit,本地小提交不丢人,出事才是大事;
可以把 git reflog 当作后悔药,但别把“有后悔药”当作可以随便浪的理由。