Git Stash在WebStorm中位于顶部菜单VCS → Git → Stash Changes,而非右键或Commit窗口;它生成Git原生ref,支持跨IDE/命令行操作,而Shelve是IDE私有补丁。

想临时切分支又不想提交脏代码?用 Git Stash,别用 Shelve —— 除非你只存部分文件、不打算跨 IDE 或命令行操作。
Stash Changes 菜单在哪,为什么右键找不到?
WebStorm 的 Stash Changes 不在右键菜单的“Git”子项里,也不在 Commit 工具窗口(Alt+0)中。它藏在顶部主菜单:点击 VCS → Git → Stash Changes…(或 Git → Stash Changes…,取决于版本)。误点 Commit 窗口右键里的「Shelve Changes」是 WebStorm 自家补丁,不是 Git 原生命令,后续无法用 git stash pop 恢复。
常见卡点:
- 工作区正处在
rebase或merge中,Stash Changes会静默失败(终端执行git stash同样报error: cannot stash in the middle of a merge) - 文件被
.gitignore或.git/info/exclude排除,IDE 直接跳过,也不提示 - 改的是二进制文件(如图片、.jar),且未配置 Git diff 支持,IDE 可能判定“无变化”而拒绝 stash
Include untracked files 到底要不要勾?
默认不勾,Stash Changes 只暂存已跟踪文件(即之前 commit 过的)的修改。如果你新增了 utils/new-api.js 并做了编辑,但没 git add 过,它不会进 stash —— 点完 OK 后文件就“消失”了,其实是被忽略。
要一并暂存新文件,必须勾选对话框里的 Include untracked files(对应命令行 git stash push -u)。但注意:
在 OpenClaw 中管理 GitHub 仓库、Pull Request、Issue 与工作流。适用于审查 PR、管理 Issue、自动化 GitHub Actions、同步仓库等场景。
- 它仍受
.gitignore约束:被 ignore 的新文件,勾了也无效 - stash 后用
Apply Stash恢复时,IDE 默认不还原 untracked 文件,需手动勾选对话框中的同名选项 - 权限变更(如
chmod +x)默认不记录,GUI 无开关控制
Stash 后怎么找回来?Apply 和 Pop 有什么区别?
stash 不会自动出现在 Log 标签页或 Commit 窗口。必须主动打开:VCS → Git → Show Stashes(或按 Ctrl+Shift+A 搜 Show Stashes)。面板列出所有 stash@{0} 记录,带时间、来源分支和备注。
Apply Stash 和 Pop Stash 的关键差异:
-
Apply:把 stash 内容打到当前工作区,stash 保留在栈中,适合反复测试或保留备份 -
Pop:等价于Apply + git stash drop,失败时(如冲突)stash 不会被删,但工作区会停在冲突状态,需手动处理 - 跨分支
Apply可能静默跳过重命名/删除的文件,IDE 不警告
Stash 是存在哪的?会不会丢?
stash 存在本地仓库的 .git/refs/stash,是 Git 原生 ref,不是 WebStorm 缓存。换电脑、换 VS Code 都能用 git stash list 看到,也能 git stash apply stash@{2} 恢复。
但要注意:
- Git 的
gc默认 30 天清理无引用 stash,长期不用的建议导出:git stash show -p stash@{0} > my-wip.patch - WebStorm 的
Show Stashes面板默认只加载最近 10 条,老 stash 需点右上角Refresh强制重读 - 误删 stash?
git reflog还能找回,但 WebStorm 不提供图形化回溯入口
最易忽略的一点:stash 和分支无关。你在 feat/login 上 stash,切到 hotfix/payment 再切回来,stash 不会自动恢复——它只是堆栈,不是快照绑定机制。

















