多次错误执行git reset后,如何恢复本地最新代码?
Git代码恢复方案
先明确reflog的SHA含义
reflog中每条记录的SHA是命令执行后的HEAD指向状态。比如HEAD@{0}: reset: moving to bc6968c,意思是执行完这次reset命令后,HEAD指向了bc6968c这个提交。
你的操作时间线梳理
从reflog可还原操作顺序:
- 切到cleanup-client分支时,HEAD指向
5011960(HEAD@{4})——这是你本地包含一天工作的最新分支状态 - 两次执行
git reset --hard origin/cleanup-client,将HEAD强制回退到远程旧版本bc6968c(HEAD@{3}、HEAD@{2}),丢失本地最新代码 - 尝试
git reset 5011960后,又通过VS Code丢弃所有变更,再次回到旧状态 - 最后执行
git reset bc6968c,当前HEAD停留在bc6968c
恢复步骤
- 先确认目标提交内容:执行以下命令查看
5011960的提交内容,确认这是你丢失的一天工作:git show 5011960 - 强制恢复到目标状态:如果确认内容正确,执行以下命令将本地分支强制恢复到包含你工作的提交:
git reset --hard 5011960
注意事项
- 执行
git reset --hard会覆盖当前工作区和暂存区的所有未提交变更,执行前确保当前没有需要保留的未提交内容 - 恢复后,若需要覆盖远程旧分支,可使用
git push --force origin cleanup-client,但推送前要确认远程没有其他人在使用该分支
内容的提问来源于stack exchange,提问作者bmitc
相关产品推荐
相关产品推荐

