Menu
CoddyTech

Git Reflog

最后更新

git reflog 记录 HEAD 指向过的每一个位置:每次提交、检出、reset 和 rebase。即使提交已经不在任何分支上,Git 也会把它们保留一段时间,所以 reflog 就是你的安全网:执行 reset --hard、变基出错或误删分支之后,那些看似丢失的工作都能通过它找回来。

在终端在线编辑器中试试这些命令:浏览器里就是真正的 shell,无需安装。

git reflog 记录 HEAD 到过的每一个位置,因 reset 或 rebase 丢失的提交可以找到并恢复。

语法

命令作用
git reflog显示 HEAD 最近的位置及其哈希值
git reflog show <branch>显示某个分支的 reflog
git reset --hard HEAD@{1}让 HEAD 跳回之前的某个位置
git branch recovered <hash>在丢失的提交上重新创建分支

出错后恢复

找到 reset 之前的提交,撤销一次错误的 reset。

步骤命令结果
1git reflog找到 reset 之前的那个提交
2git reset --hard HEAD@{1}把分支恢复到那个提交

git reflog 常见问题

git reflog 是什么?
它是一份日志,记录本地仓库里 HEAD(以及每个分支的末端)指向过的所有位置,包括提交、检出、reset、合并和变基之后的位置。git log 沿着提交的祖先关系展示历史,而 reflog 是按时间顺序记录你的操作,这正是它能用来恢复数据的原因。
git reset --hard 之后怎么找回提交?
运行 git reflog,找到 reset 之前所在提交对应的条目(类似 HEAD@{1}),然后运行 git reset --hard <that-hash>(或 HEAD@{1})回到那里。那个提交并没有真正被删除,只是没有分支指向它了,而 reflog 仍然记得它的哈希值。
怎么恢复已删除的分支?
在 git reflog 中找到该分支的最后一个提交,然后在那里重新创建分支:git branch <name> <hash>。只要删除是最近发生的(在 Git 的 reflog 过期时间之内,通常是几周),这些提交都还能这样找回。
git reflog 在不同的克隆之间通用吗?

不通用。reflog 只存在于你的本地仓库,不会被推送或克隆,它只记录你这台电脑上的操作。所以它能挽救本地的失误,却无法找回只在别的克隆里存在过的内容。

可以在线练习吗?
可以。打开终端在线编辑器,就能在浏览器里的真实 shell 中运行 git reflog,无需安装。Coddy 的免费互动 Git 课程也会一步步教你撤销更改和恢复数据。
Coddy 编程语言插图

在 Coddy 学习 Git

开始