Docs Library
用 reflog 恢复误操作
用 reflog 定位历史引用,恢复 reset、rebase、误删分支等操作后的状态。
reflog 是什么
可以把 reflog 理解为“本地引用移动记录”。当 HEAD、分支等引用发生变化时,Git 会把这些变化记下来。
这使得它特别适合处理下面几类事故:
- reset 之后想回到之前
- rebase 之后历史变乱
- checkout、commit、merge 后想找回某个旧位置
一个重要边界
reflog 主要是本地信息,不是远端共享历史。它对你自己的本地恢复特别有用,但不能替代团队层面的备份策略。
最常见的恢复流程
第一步:先看 reflog
git reflog
你会看到一串引用移动记录,例如:
- 某次 commit
- 某次 reset
- 某次 rebase 开始和完成
- 某次 checkout
第二步:找到安全位置
一旦定位到“误操作前”的提交,就可以用它做恢复锚点。
第三步:选择恢复方式
如果你确认要把当前分支彻底退回去:
git reset --hard <commit>
如果你只是想先保守地建立一个救援分支:
git branch recovery/<name> <commit>
这个方式更稳,因为它不会立刻破坏当前工作状态。
典型场景
场景 1:rebase 之后发现不对
git reflog
git reset --hard <rebase-before-head>
场景 2:误执行 hard reset
只要 reflog 里还能看到之前的 HEAD,通常就能回去。
场景 3:分支引用丢了
如果对应提交仍然可达或尚未被清理,你可以从 reflog 记录里重新建一个分支。
教学建议
在文档站里,reflog 教程最好强调两件事:
- 恢复之前先观察,不要连续再执行更多破坏性命令
- 优先新建救援分支,再决定是否 hard reset