VSCode内置Git: Create Tag仅创建不推送的轻量标签,CI/CD无法识别;正式发布须用git tag -a创建附注标签并显式git push origin v1.2.0推送。

VSCode 里打 Git 标签不能只靠图形界面完成全流程,必须结合终端命令或插件;否则标签只存本地、推不到远端、CI/CD 工具也识别不了。
Git: Create Tag 只创建轻量标签,且不推送
VSCode 内置命令 Git: Create Tag 本质是执行 git tag <name>,生成的是轻量标签(lightweight tag)——它不带作者、时间、消息,git show v1.2.0 只显示 commit 内容,没有 tagger 行。
- 该命令在命令面板(
Ctrl+Shift+P)中触发,输入后直接填名称即可,适合临时快照标记 - 它不会打开编辑器写注释,也不支持
-a或-m参数 - 打完后
git tag能看到,但git ls-remote --tags origin查不到,远端无此标签 - VSCode 的“同步”按钮(Sync)或“Push”操作完全忽略标签,必须手动推送
正式发布必须用 git tag -a 创建附注标签
CI/CD 流水线(如 GitHub Actions 的 on: push: tags)、语义化版本工具(standard-version)、Release 页面生成,都依赖附注标签(annotated tag)所含的元数据。
- 在 VSCode 集成终端中运行:
git tag -a v1.2.0 -m "Production release" - 想用 VSCode 编辑器写长消息?先配置:
git config --global core.editor "code --wait",再运行git tag -a v1.2.0(不带-m),就会唤起新窗口 - 验证是否成功:
git show v1.2.0—— 输出里应有Tagger:、Date:、Message: - 轻量标签无法升级为附注标签,同名时需先删:
git tag -d v1.2.0,再重打
标签推送必须显式执行,--tags 有风险
VSCode 不会自动把本地标签推到远端,也不会在“源代码管理”视图里显示未 fetch 的标签。你看到“没标签”,90% 是因为没 fetch 或没 push。
- 推单个标签最安全:
git push origin v1.2.0 - 批量推所有未推标签:
git push origin --tags—— 但注意:它会把所有本地未推标签(包括测试用的v0.1.0-alpha)一并推出,可能污染远端 - VSCode 状态栏点击分支名 → “Fetch from origin” 才能拉取远程新标签;仅点 “Pull” 不行
- GitLens 插件右键“Create Tag”时勾选 “Push tag to origin”,底层仍是调用
git push origin <name>,比手输少出错
检出标签后别直接改,detached HEAD 是设计使然
在 VSCode 中点击状态栏分支名 → 选 tag: v1.2.0,或运行 Git: Checkout to 选标签,都会进入 detached HEAD 状态。这不是 bug,是 Git 对只读快照的强制保护。
- 底部状态栏显示
HEAD detached at v1.2.0,此时任何commit都不会归属到分支,极易丢失 - 如需基于该版本修复问题,立刻建分支:
git checkout -b hotfix/v1.2.1 v1.2.0 - VSCode 的“Commits”面板默认不显示 tag 名,除非已 fetch 且该 commit 被打过 tag;想快速定位,用终端:
git log --oneline --decorate --all - 标签本身不可移动、不可合并,也不参与 rebase —— 它就该是个钉死的坐标
最容易被忽略的点:你打完标签、关掉终端、切回 VSCode,以为万事大吉,其实远端什么都没有;而更隐蔽的问题是,用 git tag v1.2.0 打出来的标签,CI 工具根本看不见。


















