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

执行git reset HEAD --hard丢失本地未提交文件,求助恢复方法

恢复Git硬重置后丢失的暂存文件与修改

从Reflog定位关键状态

你的git reflog记录了所有HEAD的变动,重点关注执行git reset HEAD --hard之前的节点。HEAD@{15}对应的cd5ba09是最后一次正常提交,你丢失的是这次提交后未完成提交的暂存修改——这些内容不在commit历史里,但可能还保存在Git的对象数据库中。

提取悬空Blob对象内容

你通过git fsck --lost-found找到的悬空树对象仅显示目录结构,需要进一步查找存储文件内容的Blob对象:

  1. 列出所有悬空Blob对象:
git fsck --lost-found | grep blob | awk '{print $3}'
  1. 逐个查看Blob内容,匹配你丢失的文件:
git show <blob-id>
  1. 找到匹配的Blob后,导出到对应文件路径:
git show <blob-id> > admin.mydomain.ca/assets/js/dashboard.js

重复此操作,恢复所有丢失的文件和修改。

检查历史暂存区快照

Git会保留暂存区的历史状态,你可以尝试查看重置操作前的暂存内容:

  • 查看某条reflog记录对应的暂存区文件:
git show HEAD@{1}:admin.mydomain.ca/assets/css/dashboard.css
  • 对比两次reflog之间的暂存区差异:
git diff HEAD@{2} HEAD@{1} --cached

尝试替换reflog中的序号(如HEAD@{14}、HEAD@{15}),找到包含你丢失内容的状态。

恢复后同步远程仓库

成功恢复文件后,在本地创建新提交并强制推送到GitHub:

git add .
git commit -m "Recover lost changes after accidental hard reset"
git push --force origin main

⚠️注意:强制推送会覆盖远程分支历史,若有协作者需提前通知他们同步修改。

后续预防建议

  • 避免随意执行git reset --hard,该操作会直接丢弃未提交的修改和暂存区内容;
  • 遇到提交卡住时,优先用git status排查状态,或用git stash暂存修改后再处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:33:18