vscode的git stash默认仅暂存已跟踪文件的修改,不包含未add的新文件、.gitignore文件或二进制文件;需勾选“include untracked files”或终端执行git stash push -u才能暂存未跟踪文件,右键单文件实际触发全局stash,精准暂存须先多选再用“stash selected changes”,stash列表需手动调用“git: show stash list”查看。

VSCode 的 Git Stash 功能能可靠暂存未完成工作,但默认行为容易误判——它只 stash 已跟踪(tracked)文件的修改,新文件、忽略文件、未 git add 的改动都不会进 stash,不是“点一下就全清空”。
Stash 按钮点了但文件还在“更改”列表里?
这不是失效,是作用范围没对上。VSCode 的 Stash Changes 默认等价于 git stash push,只处理已纳入 Git 管理且被修改/暂存的文件。
- 刚新建的
config.local.json且没运行过git add?它属于 untracked 文件,stash 不管 - 想一并暂存这类文件,必须手动勾选“Include untracked files”(图形界面)或终端执行
git stash push -u -
.gitignore里的路径(如node_modules/)永远不被 stash,无论是否已跟踪 - UI 显示延迟:stash 后左侧“更改”列表可能仍残留文件名,按
Ctrl+R刷新窗口或关闭再打开源代码管理面板即可同步
怎么只 stash 部分文件,而不是全部?
VSCode 1.85+ 支持精准控制,但入口藏得深——不能靠右键单个文件,得先选中。
- 在“源代码管理”面板的“更改”区域,勾选你**想暂存的文件**(支持多选、Shift/Ctrl 连选)
- 点击右上角
⋯菜单 → 选择Stash Selected Changes - 如果没看到这个选项,说明你没提前勾选文件;纯右键单个文件只会弹出“Stash Changes”,那是全量操作
- 注意:此操作仍不包含未跟踪文件,哪怕你勾选了它们——未
git add的新文件不会被纳入
stash 后切分支,恢复时冲突了怎么办?
apply 或 pop 时出现冲突,VSCode 会停在合并状态,但不会自动高亮冲突块——得靠你肉眼识别或用内置 diff 工具。
- 冲突文件会同时出现在“更改”和“暂存”区域,文件名旁带
CONFLICT标记 - 双击该文件,VSCode 会以三栏视图显示当前版本、传入 stash、共同祖先,灰色背景标出冲突段
- 手动编辑解决后,需右键文件 →
Stage Changes(不是“暂存全部”),否则git stash pop的后续清理步骤卡住 - 若想放弃这次恢复,终端执行
git reset --merge回退合并状态,stash 记录仍在
为什么 stash list 里看不到刚 stash 的记录?
VSCode 不自动刷新 stash 列表,也不在源代码管理主视图透出 stash 存在感——它完全依赖你主动调用。
- 必须手动打开命令面板:
Ctrl+Shift+P→ 输入Git: Show Stash List才能看到完整栈 - 或者,在源代码管理面板点
⋯→Stashes展开子菜单(注意不是“Stash Changes”) - 列表里每条形如
stash@{0}: On main: wip: api refactor,其中stash@{0}是索引,On main是 stash 时所在分支,不是目标分支 -
Apply Stash和Pop Stash的区别很关键:前者恢复但保留 stash 条目,后者恢复后立即删除——手滑点错没法撤回
最易被忽略的一点:stash 是纯本地操作,不会同步到远程;而 VSCode 的 UI 不提供 stash 内容预览,想确认某次 stash 具体改了哪几行,只能切终端执行 git stash show -p stash@{0}。别指望图形界面帮你核对“到底存没存对”。











