先建立心智模型
分清工作区、暂存区、本地提交和远程跟踪分支。后面每条命令都映射回这四层。
误操作之后,按这个顺序,先诊断再动手:
reset --hard、不要 push --force、不要删文件夹重 clone。git status
git reflog -20
git stash list
git branch -vv多数「代码没了」其实还在:只要进过暂存区或生成过 commit,reflog 通常能找回。真正救不回的主要是:从未 add 过的工作区改动,以及 git clean -fd 删掉的未跟踪文件。
| 你的情况 | 从这里开始 |
|---|---|
| 第一次系统学,或经常分不清暂存区和提交 | 00 · 三区与提交图 |
| 会 commit / push,但怕 reset、rebase | 06 · 改写历史 + 12 · 急救 |
| 刚把仓库搞乱,只想救回来 | 12 · 急救手册 |
| 记得命令但忘参数 | 99 · 速查表 |
读任何命令时,先看它的改动范围(工作区 / 暂存区 / 本地历史 / 远程)。只改本地、尚未 push 的,几乎都能还原;已经进共享分支的,优先 revert,不要改写历史。
main / 别人正在用的分支,用 git revert,不要 reset + push --force。clean 先 -n,reset --hard 先 stash 或确认 reflog,强制推送只用 --force-with-lease。status + reflog。 这两条比任何「万能命令」都安全。示例统一使用远程名 origin、默认分支 main、功能分支 feature/login。把它们换成你仓库里的真实名字即可。