vscode无原生git stash按钮,需用命令面板执行git: stash;stash内容不显示在源代码管理视图中,恢复需git: stash pop或终端git stash apply;冲突时应先确保工作区干净。

VSCode 里没有原生 git stash 按钮,得靠命令面板或终端
VSCode 的源代码管理视图只显示已暂存/未暂存的文件,不提供“临时藏起未暂存修改”的快捷入口。它默认把 git stash 归到“高级操作”里,不会出现在右键菜单或工具栏上。
实操建议:
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS)呼出命令面板,输入Git: Stash,选中后回车 —— 这会 stash 所有未暂存 + 已暂存的改动(等价于git stash push) - 如果只想 stash 未暂存部分(跳过已暂存的),必须打开集成终端,手动运行:
git stash push --keep-index - VSCode 内置 Git 不支持带消息的 stash(如
git stash push -m "wip-login"),想加说明只能走终端
执行 git stash 后,修改去哪了?怎么找回来
stash 是独立于工作区和暂存区的栈结构,VSCode 默认不展示 stash 列表。你点“源代码管理”图标看到的仍是当前工作区状态,仿佛什么都没发生过。
实操建议:
- 恢复最近一次 stash:命令面板搜
Git: Stash Pop,它等价于git stash pop,会把改动重新应用并删掉该 stash - 只看不应用:用终端执行
git stash list查看所有 stash,再用git stash apply stash@{0}应用指定项(不删除) - VSCode 的“源代码管理 > … > Stash”子菜单只有
Stash和Stash Pop,没有Stash Apply或Stash List,别在这儿找
为什么有时候 git stash pop 失败,报 “merge conflict”
不是 stash 本身坏了,而是你 pop 时工作区已有其他修改,Git 尝试把 stash 内容和当前文件合并,结果同一行被改了两次。
常见错误现象:
- 执行
Git: Stash Pop后,VSCode 突然在多个文件里标出大量冲突标记() - 命令面板提示 “Unable to pop from stash: exit code 1”,但没说原因
实操建议:
- pop 前先确保工作区干净(
git status显示 “nothing to commit, working tree clean”),或至少没改过 stash 里涉及的文件 - 真遇到冲突,别硬点“接受当前更改”——先用
git stash show -p看 stash 改了啥,再决定是手动合并,还是git stash drop丢弃它 -
git stash pop失败后,stash 还在栈里;但git stash apply即使失败也不会自动清理,容易堆积
VSCode 设置里开启 git.autofetch 会影响 stash 吗?
完全不影响。autofetch 只控制是否定时拉取远程分支信息(用于快速查看别人推了啥),和本地 stash 栈毫无关系。
真正要注意的配置是:
-
git.ignoreLimit:设为true可避免大仓库因文件过多卡住 stash 操作(VSCode 会扫描所有未跟踪文件) -
git.enableSmartCommit:如果开着,按 Ctrl+Enter 提交时可能误把未暂存修改一起提交,导致你忘了 stash —— 这才是实际干扰源 - 别依赖 VSCode 的图形界面做精细 Git 操作;stash/pop/apply 这类带状态变更的动作,终端更透明、可控性更强
git stash list。









