VSCode中“暂存”指将修改加入Git暂存区(index)以备提交,而非保存草稿;真正临时保存未完成代码应使用“贮藏”(git stash),其UI操作为右键或命令面板执行Git: Stash,支持描述输入,但默认不处理未跟踪文件和.gitignore忽略项。

VSCode 里“暂存”到底指什么
很多人点开源代码管理面板看到“更改”列表,第一反应是点那个 + 按钮——但这个操作叫「暂存(Stage)」,不是「保存草稿」或「藏起来」。它只是把修改放进 Git 的暂存区(index),为下一步 git commit 做准备,不会清空工作区,也不会帮你规避切换分支时的冲突。
真正想“临时保存未完成代码、腾出干净工作区”的操作,是 git stash,VSCode 里叫「贮藏」或「暂存更改(Stash Changes)」。这两个词在 UI 里混用,但行为完全不同,搞错就容易丢修改。
怎么用 VSCode 正确触发 git stash
VSCode 没有默认快捷键,右键菜单里的「Stash Changes」和命令面板里的 Git: Stash 是同一回事,都等价于终端执行 git stash push。
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入Git: Stash回车 - 或者打开源代码管理面板(
Ctrl+Shift+G),点击右上角⋯→Stash Changes - 输入一句描述,比如
wip: api retry logic,回车确认
执行后,已跟踪(tracked)文件的修改会消失,“更改”列表变空;但新创建且没 git add 过的文件(untracked),比如 .env 或 config.local.json,仍会留在列表里——这不是 bug,是 Git 默认行为。
为什么 stash 后文件还在“更改”列表里
常见假象:点了 Stash Changes,左边还是红红绿绿一堆文件。别急着重装插件,先排查这三点:
-
.gitignore里规则太宽(比如写了**),导致文件被忽略,Git 根本不认它,stash 也管不了 - 文件是新建的、没执行过
git add,属于 untracked 状态;要一并 stash,得切终端运行git stash push -u - UI 缓存没刷新:按
Ctrl+R强制重绘源代码管理面板,或关闭再打开该视图
注意:git stash 不处理被 .gitignore 显式忽略的路径(如 node_modules/),哪怕你手动 git add 过也不行。
stash 后怎么找回修改
VSCode 不自动显示 stash 列表,必须主动唤出:
- 按
Ctrl+Shift+P→ 输入Git: Show Stash List→ 回车 - 选中某条记录(如
stash@{0}: On main: wip: api retry logic)→ 回车
VSCode 默认执行 git stash pop,即恢复 + 删除该 stash。如果冲突,它不会弹窗警告,只在文件名旁标 CONFLICT,双击打开三栏 diff 视图手动解决;解决后必须右键该文件 → Stage Changes,否则后续清理卡住。
想保留 stash 记录不删?只能去终端用 git stash apply stash@{0} —— VSCode 的 UI 路径不支持 apply,只有 pop。


















