You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何恢复几周前因reset --hard丢失的Git提交及文件变更?

恢复Git中因reset --hard丢失的旧提交文件变更

1. 优先用git reflog定位丢失的提交

Git的reflog默认记录本地仓库HEAD的所有移动操作,默认保留90天,三周前的提交完全在保留期限内,不用怕过期。执行命令:

git reflog

输出里会看到类似条目:

abc1234 HEAD@{5}: commit: 完成目标文本文件的修改
def5678 HEAD@{6}: reset: moving to origin/main

其中abc1234就是被reset --hard覆盖的目标提交哈希(在reset操作的上一条记录)。

2. 单独恢复目标文件的变更

找到提交哈希后,无需恢复整个提交,直接提取该文件的版本:

  • Git 2.23及以上版本用:
git restore --source=<目标提交哈希> <你的文本文件路径>
  • 旧版Git用checkout:
git checkout <目标提交哈希> -- <你的文本文件路径>

执行后文件会恢复到对应提交的状态,之后正常提交即可保存。

3. 若reflog无记录,查找悬空对象

如果之前手动执行过git gc清理过reflog,还能通过查找未被引用的Git对象恢复:

git fsck --lost-found

命令会把所有悬空对象(包括提交、文件内容)放到.git/lost-found/目录下。用git show <对象哈希>逐个查看悬空blob(文件内容对象),找到匹配内容后直接写入目标文件即可。

关键提示

只要没执行过git gc --prune=now这类强制清理未过期对象的命令,三周前的提交对象肯定还在本地仓库,上述方法大概率能找回文件变更。

内容的提问来源于stack exchange,提问作者mars8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 19:15:27