VSCode中“+”按钮仅添加未跟踪文件,不处理已修改文件;暂存所有修改需右键选择Stage Changes或运行Git: Stage All命令。

VSCode里点“+”不等于git add,它只加未跟踪文件
很多人第一次点源代码管理面板顶部的+按钮,以为会把所有修改都暂存,结果发现改过的package.json没进暂存区,只有新文件进了——这不是bug,是VSCode的明确设计。
这个+按钮实际执行的是类似git add -f的行为,但**仅对从未被Git跟踪过的文件生效**。已修改、已删除、已忽略的文件,它统统跳过。
- 想暂存所有当前修改?右键文件 → Stage Changes,或用命令面板(
Ctrl+Shift+P)运行Git: Stage All - 如果习惯用
+但又希望覆盖更多场景,可以关掉自动忽略逻辑:在设置中搜索git.ignoreLimit,设为false;不过更稳妥的做法仍是手动 stage + 写 commit message 分步操作 - 批量 stage 多个文件时,VS Code 会按字母排序,但 Git 本身不依赖顺序;如果你的 commit message 想按功能分组(比如先 UI 再 API),建议先 stage 再写,别等全选完才动笔
冲突解决时,“Accept Current Change”和“Incoming Change”容易看反
VS Code 在冲突文件里标出的Accept Current Change和Accept Incoming Change,文字和视觉位置是错位的——这是新手踩坑最密集的地方。
顶部状态栏会显示当前分支名(比如main),那个分支的内容就对应Current;而Incoming指的是你刚拉下来的远端分支(比如origin/main)的改动。但默认 diff 视图里,远端内容常显示在左侧,本地在右侧,跟标签文字方向相反。
- 点
Accept Current Change= 丢弃远端改动,只留你本地的 - 点
Accept Incoming Change= 丢弃你本地的,全用远端的 - 最安全的做法是先点
Accept Both Changes,再手动删掉不需要的部分——尤其改的是 JSON 字段增删、配置项开关这类结构敏感内容时,自动合并极易出错
推送标签必须显式操作,VSCode不会自动推
你在VSCode里用命令面板创建了v1.2.0标签,点了同步(Synchronize Changes),却发现远程仓库查不到这个标签——因为Synchronize Changes只处理分支提交,**完全不碰标签**。
Git 的标签是独立对象,创建后只存在于本地。要让协作者看到,必须单独推送:
- 推送单个标签:
git push origin v1.2.0(推荐,精准可控) - 推送所有未推标签:
git push origin --tags(慎用,可能带入测试标签污染远程) - VSCode里没有图形化入口直接推标签,得打开集成终端手动敲;或者装 GitLens 插件,在它的“Tags”视图里右键标签 → Push Tag
- 附注标签(
git tag -a)比轻量标签更可靠,它带作者、时间、签名,适合正式发布;VSCode 创建标签时默认是轻量的,务必手动选“Annotated”
切换分支前不清理工作区,VSCode会直接拒绝
你改了几行代码没提交,想切到feature/login分支继续开发,点击分支列表却弹出报错:“There are uncommitted changes”。这不是限制,是保护机制。
Git 不允许在有未提交变更时直接切换分支,否则可能丢失修改或引发不可预知的合并行为。VSCode 把这个规则执行得很彻底。
- 三种合法出路:提交(
Commit)、暂存后 stash(右键 → Stash Changes)、或放弃全部修改(右键文件 → Discard Changes) - 别指望“强制切换”,VSCode 没提供这个选项;强行用命令行
git checkout -f可能丢数据,且破坏 VSCode 内部状态同步 - stash 后记得及时 pop 或 apply,长期堆在 stash 列表里容易遗忘,尤其多人协作时,别人看不到你的临时快照


















