误执行Git强制推送回滚操作丢失全部修改,如何恢复变更内容?
本地丢失的Git变更恢复方案
只要你此前的修改曾执行过git commit(仅本地提交未推送也可以),大概率可以完整找回,Git会在本地保留悬空提交至少30天。
有本地提交记录的恢复步骤
- 执行
git reflog,该命令会输出本地HEAD指针的所有历史变动记录,包含已被移出当前分支log链的提交,每条记录前缀为对应提交的哈希值,后缀会标注提交说明、操作类型 - 从列表中找到你误操作前最后一次包含改动的提交哈希,记为
<target-commit-hash> - 若要完整恢复改动到工作区:执行
git reset --mixed <target-commit-hash>,执行后对应提交的改动会全部回到本地工作区,不会自动提交,你可以重新整理后推送到正确的备份分支 - 若仅需提取对应改动的diff:执行
git show <target-commit-hash>即可输出完整差异内容,也可以导出到本地文件:git show <target-commit-hash> ./ > lost_changes.diff
未执行过commit的场景恢复
如果你此前的改动从未执行过git commit,分两种情况处理:
- 改动曾执行过
git add加入暂存区:执行git fsck --lost-found,Git会扫描所有悬空的文件对象并写入.git/lost-found/other目录,该目录下的文件以哈希命名,内容为你曾加入暂存区的文件内容,你可以逐份排查找回所需内容 - 改动从未执行过
git add或git commit:Git未存储过这部分改动的快照,无法通过Git工具恢复,可尝试使用操作系统层面的文件恢复工具扫描项目目录尝试找回。
内容的提问来源于stack exchange,提问作者Scouarn.
相关产品推荐
相关产品推荐

