应先执行 git rm -r --cached node_modules 再提交,然后在仓库根目录的 .gitignore 中正确添加 node_modules/(末尾带斜杠),最后配置 VSCode 的 files.watcherExclude 为 "/node_modules/": true 并重启扩展主机。

VSCode右下角 Git 图标上显示大量未暂存更改,点开全是 node_modules 里的文件?这不是 VSCode 的“提示错误”,而是 Git 真正在跟踪这些文件——光改设置没用,得先让 Git 放手。
Git 还在跟踪 node_modules?先查再删
VSCode 自己不决定哪些文件该被 Git 提交,它只是把 Git 的状态展示出来。如果 node_modules 已经被 git add 过(比如初始化时忘了配 .gitignore),那它就是“已跟踪文件”,后续加任何忽略规则都无效。
- 运行
git ls-files | grep node_modules,有输出就说明已被跟踪 - 验证忽略是否生效:运行
git check-ignore -v node_modules/react/index.js,若返回 “no match”,说明规则没起作用或路径写错 - 确认后执行
git rm -r --cached node_modules,再git commit -m "remove node_modules from git tracking"
.gitignore 里写 node_modules/ 才算真正生效
Git 的路径匹配对末尾斜杠极其敏感。node_modules(无斜杠)会同时匹配同名文件和目录,而旧版 Git 可能行为不一致;**/node_modules/ 属于过度通配,可能干扰其他规则优先级。
- ✅ 正确写法:
node_modules/(末尾带斜杠,只忽略该目录及其全部子内容) - ❌ 错误写法:
node_modules、**/node_modules/、/node_modules/(开头斜杠表示仓库根,但.gitignore本身就在根目录,多余) - 确保
.gitignore文件位于 Git 仓库根目录(即git rev-parse --show-toplevel输出的路径),不是子项目或src目录里
VSCode 自己的文件监视器还在扫 node_modules
即使 Git 不管了,VSCode 默认仍会监听整个工作区文件变化,用于自动刷新、搜索索引、智能提示等。这个过程会卡顿、吃 CPU,还会在源代码管理视图里“假报”变更——因为它压根不读 .gitignore。
- 打开 VSCode 设置(
Ctrl+,),搜files.watcherExclude - 添加配置:
"**/node_modules/**": true(注意双星号 + 双斜杠结尾,JSON 格式别漏逗号) - 改完必须重启 VSCode 或执行命令面板中的
Developer: Restart Extension Host,否则监视器不会重载规则 - 如果用了 Yarn / pnpm workspace 或 Nx,
**/node_modules/**能覆盖多层嵌套,不用额外写根目录规则
团队协作时有人还是提交了 node_modules
本地一切正常,队友却总把 node_modules 提交上来?大概率是他们机器上 Git 配置了全局忽略文件(core.excludesFile),但里面没包含 node_modules/,或者写了错误路径。
- 让他们运行
git config --get core.excludesFile查看全局忽略路径 - 检查该文件内容是否含
node_modules/,且格式正确 - 更稳妥的做法是:把
.gitignore提交进仓库,并在 README 里明确要求团队使用项目级忽略,不依赖个人配置
最常被忽略的一点:VSCode 的 files.exclude 和 search.exclude 只影响编辑器界面和搜索,跟 Git 完全无关;而 Git 的忽略规则一旦失效,所有 VSCode 设置都只是“治标”。先清缓存、再配规则、最后调编辑器,顺序错了就得反复折腾。


















