git reflog:记录时光机
比git log更强大的命令使git reflog,可以找到已经删除的commit记录,而普通的log命令无法查询到已被删除或者悬空的commit记录。reflog是git操作的一道安全保障,能够记录几乎所有本地仓库的改变。
1、reflog
管理reflog信息。git reflog根本不遍历HEAD的祖先。它是HEAD所指向的一个顺序的提交列表:它的undo历史。reflog并不是repo(仓库)的一部分,它单独存储,而且不包含在pushes,fetches或者clones里面,它纯属是本地的。

2、可选参数
reflog命令可选参数很多。
2.1、show
git reflog [show] [log-options] [<ref>]
基本上log的参数reflog都能用。参考git log。
2.2、expire
git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all [--single-worktree] | <refs>…]
修剪较旧的引用日志条目。
2.3、delete
从引用日志中删除单个条目。它的参数必须是一个精确的条目(例如“ git reflog delete master@{2}”)。最终用户通常也不会直接使用此子命令。
3、使用场景
3.1、commit回退
有时候回退到之前的某个提交记录或者rebase,如果忘了回退之前的提交记录commit ID就无法恢复。
git reset --hard HEAD~1因为这个时候git log只能显示到当前HEAD的commit记录。这个时候就可以使用reflog查看回退之前的commit记录:
git reflog
并且再使用git reset --hard 去恢复之前的状态。
3.2、删除commit找回
已经被删除的commit,log命令找不到的,reflog保存了所有commit记录,可以找回。
参考文档:


