PhpStorm本地历史是独立于Git的自动快照功能,默认开启,记录文件保存、编辑等操作,数据存于.idea/localHistory/,可 revert 恢复误改,但需文件被IDE跟踪且已保存过。
本地历史在哪找:不是 Git,是 PhpStorm 自带的 Local History
phpstorm 的「本地历史」和 git 无关,它不依赖仓库,而是自动记录你对文件的每次保存、编辑、重命名、删除等操作。只要没关掉这个功能(默认开启),哪怕你删了整个项目目录,只要 .idea 文件夹还在,历史就还在。
常见错误现象:Right-click → Local History → Show History 点不动、灰掉,或者点了没反应——大概率是当前文件没被 PhpStorm 跟踪(比如放在 vendor/ 或 node_modules/ 下,或文件类型被排除了)。
- 确认文件在项目根目录下,且未被
Settings → Editor → File Types → Ignore files and folders列表匹配 - 右键菜单失效时,试试快捷键:
Alt+Shift+C(Windows/Linux)或Cmd+Shift+A搜Show Local History - 如果文件刚新建还没保存过,
Local History不会显示任何版本——至少要触发一次保存或编辑后自动快照
恢复误删或改错的代码:用 Revert 而不是复制粘贴
看到历史列表里某个时间点的版本正好是你想要的?别手动复制内容。直接选中那条记录,点右下角的 Revert 按钮,PhpStorm 会把当前文件还原到那个快照状态,并高亮显示所有变更行。
使用场景:手抖删了一整段逻辑、正则替换炸了整个配置文件、改完 CSS 类名忘了改模板里的引用……这类“5 分钟前还好好的”问题,Revert 是最快解法。
-
Revert是覆盖式操作,不可逆(除非再从更早的历史 revert),操作前留意当前未保存的修改是否会丢失 - 如果只想恢复某几行,别 revert 全文——双击历史版本打开对比视图,在左/右面板中右键某段代码,选
Copy Lines from Left to Right(或反之) - 历史记录默认保留 5 天,可在
Settings → Editor → Local History调整Keep history for (days),但太长会拖慢大项目响应
Local History 和 Git 的关系:能共存,但别混淆职责
Git 管协作、管发布、管分支;Local History 管你个人的键盘轨迹。它们互不干扰:git commit 不影响本地历史快照,删掉 .git 目录,本地历史照常可用。
立即学习“PHP免费学习笔记(深入)”;
容易踩的坑:git checkout -- file.php 和 Local History → Revert 看起来效果一样,但底层行为不同——前者读的是暂存区或 HEAD,后者读的是 PhpStorm 自己的二进制快照。如果你刚 git add 了错误内容又没 commit,用 git 恢复可能拿不回原始版本,而 Local History 还记得 3 分钟前的样子。
- Git 被禁用或没初始化时,
Local History是唯一兜底方案 - 某些 IDE 插件(如 PHP Annotations)可能触发高频自动保存,导致历史记录爆炸——可临时关闭插件或调高
Change interval (ms)防止冗余快照 - 移动硬盘或网络盘上的项目,
Local History可能失效(因文件系统事件监听受限),建议只在本地 SSD 路径使用
找不到历史?检查 .idea/shelf/ 和 .idea/localHistory/ 是否被清理
本地历史数据实际存在项目下的 .idea/localHistory/ 目录里,每个文件对应一个压缩过的 XML 快照。如果你清过 .idea、用了 Clean Project、或同事共享了没带 .idea 的项目,这些快照就没了。
注意:.idea/shelf/ 是另一个地方——那是你手动 Shelve Changes 存的临时补丁,和 Local History 无关,别搞混。
- 不要把
.idea/localHistory/加进.gitignore(虽然它默认就在里面),如果真需要跨设备同步历史,得手动备份该目录(不推荐,兼容性差) - 磁盘空间紧张时,PhpStorm 不会自动清理这里,得靠你去
Settings → Editor → Local History → Clean up now - 遇到历史空白,先看
Help → Diagnostic Tools → Debug Log Settings开启com.intellij.history日志,重启后查idea.log里有没有history disabled或权限报错
事情说清了就结束










