Git未提交未暂存的本地修改切换分支后丢失如何恢复
未提交未暂存的本地修改找回方案
按找回成功率从高到低尝试:
- 优先检查IDE自带的本地历史
如果你用IDEA、VS Code、WebStorm这类带本地历史功能的IDE,这是找回成本最低的方式:- IDEA/JetBrains系列产品:右键点击对应文件或者项目根目录,选择
Local History->Show History,在时间线里定位到切分支之前的文件版本,直接选择恢复即可。 - VS Code:安装过Local History类插件的可以直接在插件面板找到对应历史快照;没装插件的可以查看资源管理器的时间线面板,新版本VS Code默认会留存一段时间的工作区临时快照。
- IDEA/JetBrains系列产品:右键点击对应文件或者项目根目录,选择
- 通过git悬空对象检索找回
只要是写入过工作区的文件内容,就算没有commit、没有stash,git也会生成对应的blob对象,在触发垃圾回收之前都可以找回:- 在项目根目录执行命令:
git fsck --lost-found,命令执行完成后会列出所有没有被分支、标签等引用关联的悬空对象。 - 打开项目下的
.git/lost-found/other/目录,里面所有以哈希值命名的文件就是git扫描到的悬空内容。 - 逐个执行
git show <文件哈希值>查看文件内容,匹配到你之前编写的代码后,将文件重命名为原来的文件名,放回项目对应的原路径即可完成恢复。
- 在项目根目录执行命令:
- 提前排查master分支内容
很多人会忽略git的切换分支机制:执行git checkout切分支时,如果你工作区的未提交修改和目标分支的对应文件不产生冲突,这些修改会直接跟随你切换到目标分支,不会自动留在原来的特性分支。你可以先查看master分支的提交历史、当前工作区内容,确认之前写的特性代码有没有在pull操作时被混入master的提交,或者因冲突被覆盖留在临时状态。
注意:未commit、未stash的修改不在git的正式版本管控范围内,git留存的悬空blob默认会在30天左右被自动垃圾回收,发现修改丢失后不要执行git gc类清理命令,不要大量写入新文件占用磁盘空间,避免原内容被覆盖,越早操作找回成功率越高。
内容的提问来源于stack exchange,提问作者Shubham Goel
相关产品推荐
相关产品推荐

