资讯动态

git reflog

发布时间:2026/9/8 20:37:07 来源:尧图企业网站定制
文章目录1. 简介2. 格式3. 选项3.1 显示控制3.2 时间限制3.3 其他4. 示例4.1 基础用法4.2 恢复丢失的提交4.3 按时间筛选4.4 查看相对时间5. 注意5.1 子命令5.2 git reflog vs git log 对比5.3 引用表达式格式5.4 reflog 条目何时删除5.5 常用别名设置6. 小结参考文献1. 简介git reflog用于查看本地仓库的引用日志。它记录了HEAD和分支引用在本地仓库中的每一次移动如提交、切换分支、合并、重置等。核心价值找回因git reset、git rebase、git commit --amend等操作“丢失”的提交查看本地仓库的操作历史恢复误删的分支与git log的区别git log显示提交历史可被同步git reflog显示本地引用移动的历史仅本地不同步git log只能查看从某个引用默认 HEAD出发“能追溯到”的提交历史即按父子关系向前追溯。git reflog可以查看引用如 HEAD、分支的“移动历史”包括那些不再被任何分支引用即从 git log 中“消失”的提交。2. 格式gitreflog[show][log-options][ref]gitreflog listgitreflog existsrefgitreflogwriterefold-oidnew-oidmessagegitreflog delete[--rewrite][--updateref][--dry-run|-n][--verbose]ref{specifier}...gitreflog drop[--all[--single-worktree]|refs…​]gitreflog expire[--expiretime][--expire-unreachabletime][--rewrite][--updateref][--stale-fix][--dry-run|-n][--verbose][--all[--single-worktree]|refs…​]ref可以是分支名、HEAD等引用缺省为HEAD。3. 选项3.1 显示控制--all显示所有引用的 reflog包括 HEAD、分支、远程跟踪分支等--remotes只显示远程跟踪分支的 reflog --no-abbrev 显示完整的提交哈希不缩写--oneline一行显示格式为ref{n}:action3.2 时间限制--sincedate,--afterdate只显示指定日期之后的条目--untildate,--beforedate只显示指定日期之前的条目3.3 其他--dateformat指定日期显示格式如relative,iso,short -v,--verbose显示额外的信息4. 示例4.1 基础用法# 查看 HEAD 的 reflog最常用gitreflog# 一行显示简洁模式gitreflog--oneline# 查看指定分支的 refloggitreflog main# 查看所有引用的 refloggitreflog--all输出示例a1b2c3d HEAD{0}: commit: 修复登录验证 e5f6g7h HEAD{1}: rebase -i (finish): 变基完成 i9j0k1l HEAD{2}: rebase -i (start): 变基开始 m3n4o5p HEAD{3}: reset: moving to HEAD~2 q6r7s8t HEAD{4}: commit: 添加用户注册功能4.2 恢复丢失的提交# 1. 查看 reflog找到想要恢复的提交gitreflog# a1b2c3d HEAD{2}: commit: 重要的功能# 2. 基于该提交创建新分支gitbranch recover-branch a1b2c3d# 或者重置当前分支到该提交gitreset--harda1b2c3d4.3 按时间筛选# 只显示最近 2 天的 refloggitreflog--since2 days ago# 显示指定日期范围内的 refloggitreflog--after2024-01-01--before2024-03-014.4 查看相对时间# 使用相对时间格式gitreflog--daterelative输出示例a1b2c3d HEAD{2 minutes ago}: commit: 修复登录验证 e5f6g7h HEAD{1 hour ago}: checkout: moving from main to feature5. 注意5.1 子命令git reflog 实际上是由多个不同子命令组成的用于精细化管理引用日志。子命令核心作用适用场景是否常用show(默认)查看日志显示指定引用的操作历史查看操作历史、找回误操作丢失的提交✅ 非常常用list列出引用列出所有拥有 reflog 的引用快速知道仓库里哪些引用保留着操作记录❌ 较少用exists检查存在性检查某个引用是否有 reflog在脚本中判断某个分支是否开启了 reflog❌ 较少用expire清理过期条目删除 reflog 中过期的旧条目手动清理老条目释放空间通常由git gc自动触发❌ 极少直接用delete删除单条记录从 reflog 中删除指定的一个条目确定某条操作记录是错误时彻底删除❌ 极少用drop删除整个日志彻底移除一个引用的整个 reflog不再需要某个分支的整个操作历史时清空❌ 极少用write写入新记录手动向 reflog 中添加一条记录开发底层 Git 工具或编写复杂脚本时手动记录❌ 极少用5.2git reflogvsgit log对比对比维度git refloggit log记录内容本地引用的移动历史提交历史是否可同步❌ 仅本地✅ 可推送到远程是否显示丢失的提交✅ 是只要未被 gc❌ 否典型用途恢复误操作查看项目历史5.3 引用表达式格式# 基本格式ref{n}# 示例HEAD{0}# HEAD 当前指向的位置HEAD{1}# HEAD 上一次指向的位置main{2}# main 分支前两次的位置HEAD{2.weeks.ago}# 两周前 HEAD 的位置5.4 reflog 条目何时删除git reflog expire手动清理过期条目git gc --prune垃圾回收时会清理过期的 reflog 条目默认过期时间90 天不可达条目/ 30 天可达条目5.5 常用别名设置gitconfig--globalalias.rlrefloggitconfig--globalalias.rlonelinereflog --oneline# 使用别名gitrlgitrloneline6. 小结需求命令说明查看 HEAD 的 refloggit reflog最常用简洁模式查看git reflog --oneline一行一个条目查看指定分支的 refloggit reflog main查看 main 分支的引用历史按时间筛选git reflog --since2 days ago只显示最近 2 天的条目恢复丢失的提交git reflog→git reset --hard commit找到丢失的提交哈希查看所有引用git reflog --all包括 HEAD、分支、远程跟踪分支一句话总结git reflog是 Git 的“后悔药”记录了你本地仓库的所有引用移动。当你误操作如git reset --hard丢失提交时它是找回代码的最可靠工具。** **参考文献Git - git-reflog Documentation

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价