vscode 默认不自动暂存更改,提交前必须手动 stage,否则点击提交按钮无反应或提示“nothing to commit”;因其 commit 仅作用于已暂存文件,不会自动执行 git add,新文件(蓝色 a)和修改文件(黑色/绿色 m)均需右键“stage changes”或运行“git: stage all”才能提交。

VSCode 默认不自动暂存任何更改,提交前必须手动 Stage,否则点提交按钮没反应或提示 “nothing to commit”。
为什么点了提交却没反应?
因为 VSCode 的 git commit 只作用于已暂存(staged)的文件,它不会帮你执行 git add。常见现象包括:
- 新文件显示蓝色
A图标,但没右键Stage Changes→ 提交失败 - 修改过的文件是黑色/绿色
M,但没点旁边+或运行Git: Stage All Changes→ 提交框按Ctrl+Enter后静默或弹空警告 - 左下角 Git 数字是“所有变更总数”,不是“可提交数”,别被它误导
如何启用提交时自动暂存所有更改?
修改 settings.json,加这一行:
"git.alwaysStageAllFilesForCommit": true
效果等同于每次提交前自动执行 git add .(只含已跟踪文件)。注意:
- 它不会自动添加新创建的未跟踪文件(untracked),那些仍需手动
git add或右键Stage Changes - 开启后
Enter就能提交(不用Ctrl+Enter),但容易把调试日志、临时配置一起提交 - 团队协作中建议保持默认关闭,靠人工审查更安全
想保存就自动暂存已跟踪文件?用 GitLens
VSCode 内置 Git 不支持保存即暂存,但 GitLens 插件可以:
- 安装 GitLens 后,在设置里搜
gitlens.autostage - 勾选
Git › Autostage: When Saving Changes - 仅对已跟踪(tracked)且已提交过的文件生效;新文件(蓝色
A)仍不会自动加入 - 配合
editor.formatOnSave和editor.codeActionsOnSave,能形成“保存→格式化→自动暂存”流水线
预提交校验(lint-staged + Husky)依赖的是暂存区内容
像 lint-staged 这类工具只处理“已暂存”的文件,不是工作区全量文件。所以:
- 如果你开了
git.alwaysStageAllFilesForCommit,lint-staged会跑在所有 tracked 变更上 - 但如果你用了部分暂存(
Stage Selected Ranges),它就只检查你真正选中的那几块代码 - 误关自动暂存、又忘了 Stage 某个关键文件?
lint-staged根本不会跑它,校验就漏了——这点最容易被忽略











