游乐游手机版
首页/编程语言/文章详情

如何恢复误删的Git本地分支详细步骤

时间:2026-07-17 06:54
被删除分支若没有执行垃圾回收且未超过30至90天就可以恢复。优先使用引用日志(gitreflog--all)查找包含“branch:deleted”的行,获取提交哈希值后使用gitswitch-c重建。若引用日志失效,则使用文件系统检查(gitfsck--lost-found)扫描所有悬空提交并恢复。注意恢复后及时备份。
能恢复,只要未执行 git gc --prune=now 或分支闲置未超过 30–90 天,被删除分支的提交记录通常仍留存;应立即运行 git reflog --all 定位包含“branch: deleted”或“checkout: moving from”的行,提取其前方哈希值并验证,再通过 git switch -c 重新创建分支。

如何恢复被误删的Git本地分支

先明确几个核心判断:只要没有执行 git gc --prune=now,或者分支闲置时间未超过 30–90 天,被删分支的提交对象通常仍然存在。关键就是一个字——快,立即查询 reflog,别等记录过期后再后悔莫及。

使用 git reflog --all 找到最后一次提交哈希

reflog 是最优先、最可靠的恢复手段,没有之一。它记录所有引用变更,包括 checkoutmerge,甚至 branch -D 前的状态。不依赖远程仓库,纯本地操作,默认保留 30–90 天,这个窗口期足够你做出反应。

  • 立即执行 git reflog --all,不要用 git reflog,后者仅查询当前分支,容易遗漏目标。
  • Windows 用户可运行 git reflog --all | findstr "feature/login";macOS/Linux 则使用 git reflog --all | grep "feature/login"
  • 重点查找包含 branch: deletedcheckout: moving from feature/login to main 的行。该行前面的哈希(如 abc1234)就是分支最后指向的提交。
  • 确认哈希有效性:运行 git show abc1234,检查作者、时间、文件变更是否与你的记忆相符。

使用 git branch 重建分支,避免 checkout -b 干扰工作区

获取哈希后,重建分支应当干净、可控,防止意外切换或覆盖当前修改。

  • 不要使用 git checkout -b feature/login abc1234,它会强制切换并可能触发未暂存文件的冲突警告。
  • Git ≥ 2.23 推荐用语义更清晰的 git switch -c feature/login abc1234
  • 若原分支有远程跟踪(如 origin/feature/login),创建后手动执行 git branch --set-upstream-to=origin/feature/login feature/login
  • 哈希必须完整(至少 12 位),旧版 Git 解析短哈希(如 abc1234)可能失败。

reflog 找不到时,用 git fsck --lost-found 扫描悬空提交

这是最后的兜底方法,但效率低、结果杂乱,仅在 reflog 失效后才启用。注意:git fsck 默认不会报告刚删除分支的提交——因为它们仍被 reflog 引用,属于“可达但无分支名”,并非 dangling

  • 先停止所有写操作,包括 git status,某些配置下可能触发 auto-gc。
  • 运行 git fsck --lost-found,筛选出 dangling commit def5678 类型的行。
  • 对每个可疑哈希运行 git log --oneline -n 3 def5678,比对提交信息和时间范围。
  • 确认后执行 git branch recovered-branch def5678;若需要还原多个提交,需借助 git cherry-pickgit replace 补全链条。

最容易忽略的是:reflog 条目可能存在于 HEAD@{n} 而非 refs/heads/xxx@{0} ——尤其在分支名大小写不一致(如 feature/Dev23feature/dev23)或已被清理时,需要手动扫描 git reflog --date=iso 输出中的 checkout: 行。哈希一旦失效(git shownot a valid object name),不要反复尝试,立即转向 fsck 或检查远程仓库是否存在。

来源:https://www.php.cn/faq/2815018.html
上一篇Swoole RPC框架核心考点面试精讲 下一篇Composer中文镜像源宕机应急容灾方案
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
ActionScript配置使用技巧教学指南
编程语言 · 2026-07-17

ActionScript配置使用技巧教学指南

ActionScript是基于ECMAScript的脚本语言,曾用于Flash开发。尽管Flash已淘汰,但其面向对象思想仍具学习价值,可用于旧项目维护或关联技术栈迁移。开发需配置FlexSDK等环境,掌握强类型、事件处理与显示列表等核心语法,并注意类型检查与资源管理。相关知识可延伸至Haxe等现代技术,对前端与游戏开发仍有借鉴意义。

ActionScript新手入门指南从基础知识到核心概念详解
编程语言 · 2026-07-17

ActionScript新手入门指南从基础知识到核心概念详解

ActionScript是基于ECMAScript的脚本语言,曾用于Flash开发交互内容和动画。其面向对象语法、事件驱动模型及显示列表架构,对理解编程基础仍有价值。学习其核心知识有助于建立编程思维,并可迁移至现代前端与游戏开发领域。

内存屏障在不同编译器中的实现差异与对比分析
编程语言 · 2026-07-17

内存屏障在不同编译器中的实现差异与对比分析

内存屏障是解决多线程中内存访问可见性与顺序性问题的关键同步指令。编译器和处理器的指令重排可能破坏数据一致性,不同编译器(如GCC、Clang、MSVC)的实现语法各异。遵循C++11标准,使用原子操作与内存顺序参数可确保可移植性,开发者需权衡性能与正确性选择合适的内存顺序。

Node.js日志分析从入门到精通
编程语言 · 2026-07-17

Node.js日志分析从入门到精通

分析Node js日志需从收集、级别、格式、轮转入手,推荐使用winston等专业库和JSON格式。借助ELK、Graylog等工具进行结构化分析,配合自动化脚本与监控告警实现主动洞察,定期审查日志以发现潜在风险。

dmesg PCI设备冲突解决方法
编程语言 · 2026-07-17

dmesg PCI设备冲突解决方法

针对dmesg中PCI设备冲突,可通过定位冲突类型(IRQ、内存地址、I O端口),更新设备驱动,调整BIOS资源配置(如启用Above4GDecoding),更换PCIe插槽,禁用冲突设备或驱动,修改内核启动参数(如pci=noaer),以及检查硬件兼容性与固件版本等方法依次排查解决。