VSCode没有一键清空暂存区的快捷键,需用git restore --staged .命令安全清除暂存区而保留工作区修改,右键Unstage仅逐个操作,Discard All Changes不作用于暂存区。

VSCode里没有真正“一键清空暂存区”的快捷键
VSCode UI 默认不提供单个快捷键直接清空整个暂存区。你看到的 Ctrl+Shift+G(或 Cmd+Shift+G)只是打开源代码管理视图,不是清空操作。想清暂存区,必须明确选择动作:是只清暂存区?还是连工作区一起丢弃?两者逻辑完全不同,混用会丢代码。
清空暂存区最安全的实操路径
推荐分步操作,避免误删工作区修改:
- 先在源代码管理视图中切换到 STAGED CHANGES 区域
- 右键任意文件 → 选
Unstage,可逐个移出暂存 - 想清全部?终端运行:
git restore --staged .(注意末尾的点) - 该命令只影响暂存区,工作区所有修改原样保留,可放心执行
为什么不用 git reset --hard?
这条命令会同时清掉暂存区和工作区——相当于把所有未提交改动全删了。如果你刚改完一堆代码还没备份,git reset --hard 执行后就真没了。VSCode 的「Discard All Changes」按钮也只清工作区,它默认不碰暂存区,所以不能靠它解决暂存区问题。
使用约定式提交(Conventional Commits)从 Git 历史记录中生成结构化变更日志,支持多种格式、AI 增强型描述以及可自定义的范围……
子模块里暂存区清不干净?
如果项目含 Git 子模块,git restore --staged . 不会递归进入子模块目录。你得手动 cd 进每个子模块,再单独执行一次该命令。否则子模块里的暂存状态会残留,后续 git status 仍显示有变更。
真正容易被忽略的点是:暂存区和工作区是两层独立状态,VSCode 的 UI 操作常常只作用于其中一层。不看清当前在哪个区域、目标是哪一层,就容易以为“点了×就清完了”,结果发现 git add 过的文件还在暂存区里躺着。

















