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

如何恢复git reset --hard操作后丢失的未提交代码更改?

Git硬重置后未提交改动找回方案

问题背景

误用次要GitHub账号完成代码提交后,为删除错误提交依次执行了以下命令:

git reset --hard HEAD~1
git push -f origin development

命令执行后未达到删除错误提交的预期,同时本地部分未提交的改动意外丢失,无法直接查看丢失内容。

未提交改动找回步骤

git reset --hard 会直接清空当前工作区、暂存区的所有未提交修改,这类改动没有生成正式提交记录,但可以通过以下路径尝试找回:

  • 通过Git悬空对象找回
    Git会将所有曾经写入对象库的内容(包括执行过git add的暂存文件、曾经提交过的内容)临时留存,直到自动垃圾回收(一般默认留存数周)。执行以下命令扫描所有游离的文件对象:
    git fsck --lost-found
    
    扫描完成后,所有可恢复的游离文件会被存放在本地仓库路径 .git/lost-found/other/ 下,文件以Git哈希值命名,逐个查看文件内容即可匹配到你丢失的未提交改动。
  • 通过Git引用日志找回暂存记录
    如果丢失的改动曾经被加入过暂存区,可以通过操作日志定位重置前的状态:
    git reflog -g
    
    在输出的记录里找到执行git reset --hard操作前的对应节点哈希,执行以下命令即可查看当时的文件内容,手动恢复对应文件即可:
    git show <你找到的节点哈希值>
    
  • 通过编辑器本地历史找回
    如果丢失的改动从来没有执行过git add,没有被Git写入对象库,Git层面没有留存记录,可以通过你使用的代码编辑器自带的本地历史功能找回:比如VS Code的资源管理器时间线功能、JetBrains系列IDE的Local History功能,这类功能会自动留存本地编辑的文件版本,不需要Git追踪也能恢复。

之前删除错误提交失效的原因

执行重置和强推后没有删掉远程错误提交,大概率是执行命令时你本地所在的分支不是对应远程development的追踪分支,或者本地分支没有同步到最新的远程提交记录,重置的提交点和远程最新的错误提交不匹配,强推后自然不会覆盖掉远程的错误提交。后续操作时先切到本地development分支,拉取最新远程状态确认提交链路后,再回退到正确提交点执行强推即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 07:33:19