文章目录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
git reflog
文章目录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