背景:
有一次我开发新功能时,为了保留原始代码,手动备份了一份文件。接着,我将原文件重命名,并把新的文件重命名为原始文件名。操作完成后,我没多想,直接推送到了远程仓库。等我再次检查时,发现文件内容还是原始版本的代码,而备份文件已经被我删掉了!
懵了,这意味着我的新功能代码被覆盖了,Git的历史记录中也没有这个修改版本。怎么找回丢失的代码呢?下面是我的寻找之旅,以及最终成功恢复代码的经历。
解决方案:
尝试1:使用 Git Log 查找提交记录
我的第一反应是通过 git log 查看提交记录,看看有没有可能通过回滚提交找回代码
git log
但是,由于误操作直接推送了原始版本的文件,Git的历史记录里根本没有包含我写的新功能代码的提交记录,等于白忙一场。
尝试2:使用 Git Reflog 查看HEAD变动历史
接着,我尝试使用 git reflog,这个命令可以查看所有 HEAD 的移动记录,包括已经 reset、rebase、merge 的操作。
git reflog
这可以让我看到所有最近的提交和修改操作。于是,我找到了这次误操作前的某个提交,试图回滚到那个版本:
git reset --hard <commit_id>
但是,这样操作的问题是会丢失我在那之后的其他修改,不太符合我当前的需求。而且之前我并没有单独提交新功能代码的版本,所以这一招也没能成功帮我找回。
尝试3:通过 Git 文件恢复
我还尝试了使用 git checkout 命令恢复文件历史版本:
git checkout HEAD~1 -- <file_name>
可惜,我已经直接推送了错误的文件版本,这导致这个文件在最近一次提交里并没有新功能代码的修改记录,所以也无法恢复。
最终救命方案:IDEA的 Local History 功能
在经历了一系列 Git 操作无果后,我几乎绝望了。在网上找了些文章,有个方向就是说通过开发工具找回。因为我开发使用的IDEA,于是我开始在IDEA里疯狂翻找,希望能有什么办法找回误删的代码。突然发现IDEA有个功能叫 “Local History”(本地历史记录),可以查看文件最近的编辑记录。
具体操作如下:
- 选中菜单栏的File选项
- 在File下拉选项中找到LocalHistory选项
- 在LocalHistory选项中找到Recent Change选项,就可以看到最近的编辑历史记录
如下图所示:


575

被折叠的 条评论
为什么被折叠?



