reflog 与 clean
约 528 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › Git › 高级操作(在新窗口打开) › reflog 与 clean
git reflog
git reflog 记录 HEAD 指针的所有移动历史——相当于 Git 的操作日志。这是找回丢失提交的最重要工具。
git reflog
# a1b2c3d (HEAD -> main) HEAD@{0}: commit: fix bug
# d4e5f6f HEAD@{1}: reset: moving to HEAD~1
# g7h8i9j HEAD@{2}: commit: add feature
# ...(最近的操作在最上面)恢复误删的提交
# 场景:不小心 hard reset 丢了提交
git reset --hard HEAD~3
# reflog 仍然有记录
git reflog | grep "feature"
# g7h8i9j HEAD@{5}: commit: add feature
# 通过 reflog 恢复
git reset --hard HEAD@{5}
# 或
git cherry-pick g7h8i9jreflog 有有效期(默认 90 天),在有效期内的操作都可以找回。
reflog 有效期
# 查看 reflog 有效期
git config gc.reflogExpire
# 默认 90 天
# 修改有效期
git config --global gc.reflogExpire 180
git config --global gc.reflogExpireUnreachable 30git clean
清除工作区中的未跟踪文件:
# 预览要删除的文件
git clean -n
# 删除未跟踪文件
git clean -f
# 删除未跟踪文件 + 目录
git clean -fd
# 配合 .gitignore 保护(忽略的文件不会被删除)
# 强制删除包括被 ignore 的文件
git clean -xfd常用组合
# 撤销所有工作区修改(跟踪文件 + 未跟踪文件)
git reset --hard HEAD
git clean -fd
# 只删除未跟踪文件(保留已跟踪的修改)
git clean -fd找回丢失的工作
小结
git reflog是 Git 的"后悔药"——所有指针移动都有记录,可找回误删的提交。git clean -n预览,-fd删除未跟踪文件和目录,-xfd包括.gitignore中的文件。- reflog 默认保留 90 天,过期后不可恢复。
git reset --hard HEAD+git clean -fd彻底重置工作区到最新提交状态。
上一节:git stash 与 tag 下一节:Pull Request 流程
