VSCode 中 stash 操作需通过源代码管理视图右上角“…”菜单选择 Stash Changes,执行 git stash push -m "VS Code stash" 并可补充描述;默认不 stash 未跟踪文件,需设 git.untrackedChanges 为 all;stash 列表不可见,仅支持对最新 stash 应用或弹出,历史操作须用命令行。

VSCode 内置 Git 面板可以直接 stash,但默认不显示 stash 列表,且 git stash push 和 git stash save 行为有差异,容易误删未提交的修改。
如何在 VSCode 中触发 stash 操作
打开源代码管理(Source Control)视图(Ctrl+Shift+G 或左侧活动栏图标),点击右上角“…”菜单 → 选择 Stash Changes。这会执行 git stash push -m "VS Code stash",并自动弹出输入框让你补充 stash 描述(可选)。注意:它不会 stash 未跟踪(untracked)文件,除非你提前在设置里开启。
- 若想同时 stash 新建但未
git add的文件,需先在 VSCode 设置中搜索git.untrackedChanges,设为all - 如果当前有冲突或合并进行中,VSCode 会禁用 stash 按钮,这是保护机制,别强行绕过
- 执行后,工作区变干净,VSCode 左下角状态栏会短暂提示 “Stashed changes”
为什么 stash 后找不到记录?
VSCode 默认不展示 stash 历史列表,git stash list 的输出在 UI 上不可见。你只能通过命令行查看,或借助第三方扩展(如 GitLens)补全该功能。原生界面只支持从 stash 恢复(Apply Stash)和删除(Pop Stash),且仅对最近一次 stash 生效。
- 恢复时选
Apply Stash是叠加应用(保留 stash 记录),选Pop Stash是应用 + 删除该条记录 - VSCode 不支持从任意 stash 条目中选择恢复,只能操作最新的那一个;要操作更早的,必须用命令行:
git stash apply stash@{1} - 如果误点了
Pop Stash导致冲突,VSCode 会像普通 merge 冲突一样高亮文件,但不会自动帮你 resolve —— 这时候得手动编辑再git add
stash 的内容范围与常见误操作
git stash 默认只处理已跟踪(tracked)且已暂存或已修改的文件,完全忽略 untracked 和 ignored 文件。很多人以为新建了一个配置文件、没 add 就 stash 不掉,结果切分支时被丢弃——其实不是 stash 没生效,是它本来就不管这类文件。
- 要 stash untracked 文件,必须用命令行:
git stash push -u(-u=--include-untracked),VSCode GUI 不提供这个选项 - 如果文件被
.gitignore忽略,即使加了-u也不会 stash,得临时取消 ignore 或用git add -f强制跟踪 - 执行
git stash前,确保没有git cherry-pick或rebase进程在后台运行,否则可能 stash 到错误的 base commit 上
真正麻烦的不是怎么 stash,而是 stash 多了之后记不清每条对应什么场景;VSCode 不暴露 stash ID 和完整描述,靠名字区分很容易混淆。建议每次 stash 都写明确描述,比如 stash@{0}: On feature/login: WIP form validation,而不是留空或写 “temp”。


















