git reflog 是什么
git reflog 记录 HEAD 与分支指针的每一次移动:提交、切换分支、重置、变基、合并都会留下一条记录。它是本地操作日志,也是误操作之后的第一手救援线索——误 reset、误删分支、变基失败之后,往往都能在这里找到原来的位置。
为什么它能救回提交
Git 的提交对象不会因为指针移开就立刻消失,只是变成没有引用的悬空对象。reflog 保存着这些指针曾经指向的位置,相当于给了你一台时间机器:找到那一刻的哈希,再把它重新变成分支,或者直接重置过去即可。
基本信息
| 适用平台 | Linux / macOS / Windows(Git 2.x) |
|---|---|
| 保存位置 | .git/logs/ 下的引用日志 |
| 默认保留 | 约 90 天,由 gc.reflogExpire 控制 |
| 常用写法 | git reflog、HEAD@{3}、git reflog show <分支> |
| 典型用途 | 找回误操作的提交与分支尖端 |
| 是否分发 | 本地数据,不随仓库同步 |
典型使用场景
- 救援误重置:reset --hard 之后找回被丢弃的提交
- 恢复误删分支:找到分支尖端哈希重新建分支
- 查看轨迹:确认自己刚才究竟执行了哪些操作
- 变基失败:回到变基开始之前的位置
- 定位悬空提交:结合对象检查确认丢失内容的归属
常用示例
常用示例
git reflog # 查看 HEAD 的移动记录
git reflog show main # 只看某条分支的记录
git reflog --date=iso | head # 带时间戳查看最近几条
git reset --hard HEAD@{3} # 回到三步之前的位置
git branch rescue HEAD@{5} # 用历史位置建一条救援分支
git log -g --oneline -10 # 以图形方式查看引用日志常见记录与含义
| 记录片段 | 含义 | 用法 |
|---|---|---|
| commit | 一次新提交 | 确认提交是否已生成 |
| checkout | 切换分支 | 查看分支切换轨迹 |
| reset | 指针被重置 | 找回重置前的位置 |
| rebase | 变基相关操作 | 确认变基的起点 |
| branch -D | 删除分支 | 找到被删分支的尖端 |
误执行 reset --hard 之后,用 reflog 找到重置前的那条记录,再 reset 回去或者拉成一条救援分支即可。
reflog 是本地数据,不随仓库分发,找回只对本机有效;超过保留期或被清理之后,记录就会消失。