VSCode无原生stash功能,需通过命令面板执行Git: Stash,默认仅保存已跟踪文件变更;stash未跟踪文件需在终端使用git stash push -u;切换分支失败常因stash未成功或文件被占用。

VSCode 里没有原生 stash 功能
VSCode 本身不提供 Git stash 命令的独立 UI 按钮或快捷键。它只是把 Git CLI 的能力封装进源代码管理视图,所有 stash 操作最终都调用 git stash 命令。如果你在“源代码管理”侧边栏只看到暂存(Stage)和提交(Commit)按钮,没找到 stash 入口——这不是你漏看了,是它确实没做。
用命令面板快速执行 stash
最直接的方式是调出命令面板,触发 Git stash 命令:
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS)打开命令面板 - 输入
Git: Stash,选中后回车 - 默认会执行
git stash push -m "VS Code stash",保存当前工作区所有已跟踪文件的未提交变更
注意:如果工作区有未跟踪文件(untracked),默认不会被 stash 包含。需要手动加参数——但 VSCode 内置命令不支持传参,这时就得切到终端。
终端里 stash untracked 文件要加 -u
很多用户 stash 后发现新创建的文件不见了,其实是没被存进去。Git 默认只 stash 已跟踪(tracked)文件的修改,-u(或 --include-untracked)才管那些还没 git add 过的新文件:
git stash push -u -m "with untracked"
常见错误现象:git stash list 看到记录,但切分支回来后 git stash pop 找不到刚建的 .env 文件——就是缺了 -u。
顺带一提:-a(--all)还会包含忽略文件(.gitignore 里的),一般用不到,反而容易误操作。
stash 后切换分支失败?检查是否有冲突文件
VSCode 在执行 Git: Stash 后自动切换分支时可能卡住或报错,典型提示是:error: Your local changes to the following files would be overwritten by checkout。这说明:stash 没成功,或者部分文件被锁住(比如被其他进程占用、权限问题、Windows 下的文件句柄残留)。
- 先运行
git status确认是否真 stash 成功(应该显示 “nothing to commit, working tree clean”) - 如果仍有修改,可能是某些文件被 VSCode 自己占着(比如正在编辑的 .log 文件),关掉相关标签页再试
- Windows 用户偶尔遇到
Unable to create '/path/.git/index.lock',删掉该 lock 文件即可
真正麻烦的是 stash 里混了二进制文件(如图片、压缩包)又频繁 pop/apply——Git 不会合并它们,冲突时直接拒绝,得手动还原原始版本再处理。


















