vscode中通过命令面板执行git: stash实现暂存,仅处理已跟踪文件,默认消息为“vs code stash”;stash后需用git: show stash list查看并pop恢复,不支持精细参数和内容预览,新文件需加--include-untracked才被暂存。

Git stash 命令在 VSCode 里怎么触发
VSCode 的 Git 面板本身不直接暴露 git stash 按钮,但能通过命令面板快速调用。别指望右键菜单或状态栏图标一键完成——它藏得有点深,得手动唤出。
操作路径:按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 Git: Stash,回车即可。VSCode 会默认执行 git stash push -m "VS Code stash",带默认消息。
- 如果当前有未暂存的修改,
Git: Stash会一并 stash;想只 stash 已暂存(staged)部分?得切到终端手动运行git stash push -S - VSCode 不支持 stash 时跳过暂存区(即不带
-S也不带--include-untracked的精细控制),需要额外参数就得开终端 - 注意:如果工作区有冲突未解决,
Git: Stash会失败,并提示error: Cannot save the current index state
stash 后如何在 VSCode 里找回修改
stash 是临时仓库,VSCode 不会自动列出所有 stash 记录,也不会在源代码管理视图里显示它们。你得主动打开命令面板查。
执行 Ctrl+Shift+P → 输入 Git: Show Stash List,就能看到类似 stash@{0}: On main: VS Code stash 的列表。选中后回车,VSCode 就执行 git stash pop —— 注意是 pop,不是 apply,它会自动删掉这条 stash。
- 如果 pop 失败(比如和当前工作区冲突),VSCode 会弹窗报错,但 stash 并没被删除,可以再试一次或改用终端
git stash apply stash@{0} -
Git: Show Stash List不支持查看 stash 内容差异,要看改了啥,得去终端跑git stash show -p stash@{0} - VSCode 的“源代码管理”侧边栏不会刷新显示 stash 后空荡荡的状态,有时仍显示已修改文件——这是 UI 缓存问题,关掉再打开面板或按
Ctrl+R刷新窗口可缓解
为什么 stash 后文件没消失,或者 stash 不生效
常见假象:点了 Git: Stash,结果左边“更改”列表还是满的。这不是 VSCode bug,大概率是你没理解 stash 的作用边界。
-
git stash默认只处理「已跟踪(tracked)」且「已修改/已暂存」的文件;新创建但没git add过的文件(untracked)会被忽略,除非你手动加--include-untracked - 如果你刚新建了
config.local.json并编辑过,又没git add,stash 后它还在列表里——这不是失效,是本来就不归 stash 管 - VSCode 的“暂存”(Stage)操作和 git stash 是两套逻辑:先 Stage 再 stash,和直接 stash 效果一样;但如果你点了 “暂存全部”,再点 stash,它 stash 的仍是工作区快照,不是暂存区快照
- 检查是否真 stash 成功:终端里跑
git stash list,为空就说明根本没存进去
vscode-stash 插件值得装吗
官方 Git 支持够用,插件反而可能添乱。目前主流的 vscode-stash 插件(如 sheerun.vscode-stash)只是把命令面板里的操作做成按钮,没增加核心能力,还常因 VSCode 版本更新失灵。
- 它不能绕过 VSCode 对
git stash参数的限制,比如依然不支持--keep-index或指定路径 stash - 插件点击“应用某条 stash”时,底层还是调
git stash apply,遇到冲突一样卡住,还得切终端处理 - 如果你频繁要查 stash 内容、重命名、或 drop 特定条目,不如习惯用终端:一行
git stash list,一行git stash show -p stash@{1},比点来点去快得多
真正容易被忽略的是:stash 不是备份,它不进远程仓库,关闭 VSCode 或清空 Git 缓存都可能让 stash 记录丢失。重要改动,哪怕只是临时切换分支,也建议先 commit 一个 wip 提交,比依赖 stash 更稳。











