PhpStorm右键Show History仅查文件存在期间的提交,删除后即断档;需用git log --follow、--all --diff-filter=D等命令补查全生命周期操作。

右键 Show History 只查存在期间的提交,删了就断档
文件被删除后,右键它 → Git → Show History 会返回空列表或只显示删之前的记录——因为 PhpStorm 默认只查该文件路径在工作区中“存在过”的提交。它不追溯 git log --all 范围内的删除动作。
真正要覆盖全生命周期(含重命名、移动、删除),得用命令行补查:
-
git log --follow --oneline path/to/file.php:补上重命名前的历史(PhpStorm 不自动加--follow) -
git log --all --diff-filter=D --name-only --oneline | grep "file.php":查所有分支里是否删过它 -
git log -M --diff-filter=D --oneline -- old_name.php:加-M让 Git 尝试识别重命名关联
Annotate 不是 Blame,它只显示最后改这行的提交
右键某行 → Git → Annotate(或 Ctrl+Shift+A 搜 Annotate)触发的是 git log -L,不是原生 git blame。它列出的是“影响该行的所有提交”,但默认只展开最近一次;你得手动点每条记录旁的 ▼ 才能看到更早的变更。
注意三点:
立即学习“PHP免费学习笔记(深入)”;
- 它不显示原始作者——如果某行是合并进来的,Annotate 显示的是 merge 提交者,不是实际写代码的人
- 对整行缩进、空格调整不敏感,
git log -L默认不带-w,想忽略空格得切 Terminal 手动加参数 - 函数被剪切到新文件后,
-L不跨文件追踪,此时必须用git blame -C -C -C才可能找到源头
搜索框语法只有 path: 有效,别输 file: 或 name:
单文件历史窗口顶部的搜索框,本质是 git log 的路径过滤器,只认 path: 前缀。输错关键词就筛不出结果。
常用组合:
-
path:src/config/db.php:精确匹配单文件 -
path:config/ author:张三:空格隐式 AND,查 config 目录下张三的修改 -
path:api/ regex+ POST|GET:查 api/ 下 commit message 含 HTTP 方法的记录
不支持通配符:path:*.js 无效,必须写成 path:js/ 或具体路径。
灰色提交点不开 diff?换用 Show Diff with Working Tree
单文件历史里双击某条灰色提交(虚线边框),常出现空白面板或 File not found in working tree 错误。这不是 bug,是路径不一致导致的——比如文件已被删、重命名、或当时在 submodule 里。
更稳的做法是:
- 右键该提交 →
Show Diff with Working Tree:强制比对“那次提交快照”和“你现在打开的文件”,绕过路径校验 - 如果当前文件已不存在,先
git checkout <commit> -- path/to/file.php把它临时拉回来再试 - 别依赖双击打开,默认行为太脆弱;尤其当文件经历过
git mv以外的重命名时,PhpStorm 很难自动关联
文件重命名、跨分支删除、行级作者归属——这些都不是点几下菜单就能理清的事。Git 日志结构本身决定了:没有单一视图能覆盖所有场景,得根据问题类型切换工具链。


















