Git:如何恢复已放弃的Cherry-pick中的未提交本地更改?
恢复Cherry-pick Abandon后丢失的本地未提交更改
以下是几种可行的恢复方法,按优先级尝试:
1. 通过Git Reflog回溯操作前状态
Visual Studio的「Abandon」按钮对应Git原生命令git cherry-pick --abort,Git会完整记录所有操作历史,你可以通过reflog找回之前的状态:
- 执行命令:
git reflog - 在输出结果里找到标记为
cherry-pick: aborting的条目,往前数一条就是你启动cherry-pick前的HEAD状态(格式类似HEAD@{2}: cherry-pick: start...) - 执行恢复命令:
git reset --hard HEAD@{n}(将n替换为对应条目的序号)
2. 扫描Git对象数据库找回匿名文件版本
Git会持久化保存所有曾经存在的文件对象,哪怕未提交到版本库:
- 执行命令:
git fsck --lost-found - 进入仓库目录下的
.git/lost-found/other文件夹,这里存放着Git扫描到的未被引用的文件对象 - 用
git show <对象ID>查看每个对象的内容,找到你丢失的修改后,复制内容到对应的本地文件即可
3. 利用Visual Studio本地文件历史恢复
Visual Studio自带独立于Git的本地文件版本记录,不受Git操作影响:
- 在VS中打开丢失文件所在的项目,右键点击目标文件(若文件已被删除,可在解决方案资源管理器中右键对应目录,选择「添加」→「现有项」定位原文件位置)
- 选择「查看历史记录」,在弹出的版本列表中找到你修改过的版本,右键选择「恢复」
关键提醒
- 不要在仓库内执行新的提交、修改或清理操作,避免覆盖Git暂存的临时对象
- 如果
git fsck返回的对象过多,可以用git show <对象ID> | grep "你记得的代码片段"快速定位目标文件
内容的提问来源于stack exchange,提问作者Jano Rajmond
相关产品推荐
相关产品推荐

