Git 恢复被删除的分支 reflog 找回

FreeGuideOnline 最新 2026-07-05

bash git reflog


输出示例:

a1b2c3d HEAD@{0}: commit: Fix login bug b2c3d4e HEAD@{1}: checkout: moving from feature to main c3d4e5f HEAD@{2}: merge feature: Merge made by the 'ort' strategy d4e5f6a HEAD@{3}: checkout: moving from main to feature


每一个 `HEAD@{n}` 都指向了曾经所在的一个提交。

### 查看特定分支的 Reflog

如果你记得分支名称,可以直接查看该分支的历史引用:

```bash
git reflog show <branch-name>

即使分支已被删除,只要相关提交未被垃圾回收,其 reflog 仍可通过 git reflog(HEAD 级别)或通过恢复后的引用访问。

恢复被删除分支的步骤

第1步:确认分支最后一次提交的哈希

首先,通过以下命令找出你想要恢复的那个分支在删除前的最新提交:

git reflog

你会看到类似如下的记录:

9f1c3e8 HEAD@{12}: checkout: moving from feature-xyz to main

最左侧的 9f1c3e8 就是对应的提交哈希。你需要找到 checkout: moving from <deleted-branch> to ... 这类记录,记录所在行的提交哈希就是该分支的最后一个提交

另一种更精确的方法是使用时间范围过滤:

git reflog --date=iso | grep "checkout: moving from feature-xyz"

第2步:基于哈希重新创建分支

拿到正确的提交哈希后,直接使用 git branch 命令将其恢复:

git branch <deleted-branch-name> <commit-hash>

例如:

git branch feature-xyz 9f1c3e8

此时,分支已恢复,并指向删除前的最后一次提交。

第3步:验证恢复结果

切换到恢复的分支并查看日志,确认内容无误:

git checkout feature-xyz
git log --oneline -5

使用 git reflog 恢复已删除的分支(无分支名称情况)

如果你不记得确切的分支名称,但记得大概的提交信息,可以直接搜索 reflog:

git reflog | grep "关键词"

或者使用更可视化的方式:

git log --oneline --walk-reflogs

该方法会列出所有 HEAD 的移动历史,并显示提交信息,有助于定位到被删除分支的最后一个提交。

常见场景与解决方案

场景1:通过 Git GUI 或 IDE 误删分支

操作与命令行删除本质上相同,reflog 中仍会保留 checkout: moving from... 的记录。只需按照上述步骤找到哈希即可恢复。

场景2:已执行 git gc 或 reflog 被手动清理

如果垃圾回收已经执行且 reflog 记录被清除,可以从 git fsck 中寻找悬空对象:

git fsck --lost-found

该命令会列出所有不可达的提交对象,找到合适的提交后同样可以创建分支。但这仅在对象未被彻底删除时有效。

场景3:恢复远程已删除分支

如果远程分支被删除,但本地之前曾跟踪过,可以使用以下命令恢复:

git reflog show remotes/origin/<branch-name>

或者通过查看本地仓库中残留的远程跟踪引用恢复:

git branch <branch-name> origin/<branch-name>