phpstorm 的 git stash 功能真实调用 git stash push,跨 ide 和机器可用;点「stash changes」无反应通常因合并冲突、文件被 .gitignore 忽略或二进制文件未配置 diff 支持;恢复需通过「show stashes」面板点击「apply stash」,而非仅依赖 pop。

PhpStorm 的 Stash 功能不是“IDE 缓存”,而是真实调用 git stash push,所有操作与命令行完全等价,跨 IDE、跨机器可复用。
Stash 按钮点了没反应?先看这三类 Git 状态
常见“点完消失、找不到记录”问题,基本不是 PhpStorm 卡顿,而是 Git 层面拒绝执行:
- 工作区存在未解决的合并冲突(
git status显示Unmerged paths)→git stash命令本身失败,PhpStorm 静默跳过 - 修改的文件被
.gitignore或.git/info/exclude明确忽略 → PhpStorm 不识别为“可 stash 文件”,也不提示 - 改动的是二进制文件(如
logo.png),且 Git 未配置diff处理器 → PhpStorm 认为“无文本变化”,不纳入 stash 范围
验证方式:终端执行 git status -uall,只看它列出的 modified/untracked 文件,才是 PhpStorm 可能 stash 的范围。
Include untracked files 勾了却没 stash 新文件?检查 .gitignore
勾选 Include untracked files 对应命令行的 git stash push -u,但它不绕过 .gitignore。如果新文件(比如 config.local.php)被 ignore 规则匹配,即使勾选也无效。
实操建议:
- 临时测试:终端运行
git check-ignore -v config.local.php,确认是否被拦截 - 想强制暂存被 ignore 的文件?需额外勾选
Include ignored files(对应git stash push -u --include-untracked),但极少需要,慎用 - 新增文件但不想提交?更合理做法是先
git add --intent-to-add <file></file>,再 stash —— 这样它就变成“已跟踪但未修改”状态,自然进入 stash
从列表恢复某次 stash,别只依赖 Pop
Pop = Apply + Drop,一旦冲突失败,stash 保留但工作区卡住;而 Apply 只应用不删除,适合反复验证。
精准恢复的关键操作:
- 打开
VCS → Git → Show Stashes(或Ctrl+Shift+A搜Show Stashes) - 列表中每条都带完整时间戳、来源分支名和你填的 message,直接点击右侧
Apply Stash按钮 - 若 stash 含未跟踪文件,Apply 时会弹出对话框,必须手动勾选
Include untracked files才能还原它们 - 误删 stash?终端执行
git reflog可找回最近被 drop 的 stash 引用(如stash@{2}),再用git stash apply stash@{2}
Stash 和 Shelve 到底该选哪个?看协作场景
Stash 是 Git 原生机制,Shelve 是 PhpStorm 自建补丁,两者底层不互通:
- 要切换分支修紧急 bug、后续可能在终端用
git stash pop恢复 → 必须用Stash Changes(菜单路径:VCS → Git → Stash Changes…) - 只想临时搁置部分文件(比如只 stash
UserService.php,留着ControllerTest.php继续调)→ 用Shelve Changes(在 Commit 窗口右键文件) - Stash 默认 30 天可能被
git gc清理;Shelve 存本地磁盘,不随 Git 生命周期变动 - 冲突处理:Shelve 提供 IDE 内置三向合并视图;Stash 冲突必须切终端手动解决
最易被忽略的一点:PhpStorm 的 Stash Changes 没有默认快捷键,必须进 Settings → Keymap 手动绑定(比如设为 Ctrl+Shift+T),否则每次都要走右键菜单。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










