git tag仅显示本地标签,不包含远程标签;查看远程标签需先执行git fetch --tags再运行git tag,或用git ls-remote --tags origin直接查看未拉取的远程标签。

直接看所有本地标签,用 git tag 就够了;想看远程的,得先 git fetch --tags 再查。
git tag 不加参数只显示本地轻量标签
默认执行 git tag 时,Git 只列出你本地仓库里已有的**轻量标签(lightweight tag)**,不包括附注标签(annotated tag)——等等,不对,其实它俩都列,只是不区分。真正容易混淆的是:它完全不查远程仓库,哪怕远程有几十个新标签,git tag 也视而不见。
- 只显示本地
.git/refs/tags/下的引用,和git ls-remote --tags origin毫无关系 - 如果刚克隆完仓库,又没手动打过标签,
git tag输出为空,不代表没有标签 - 排序按字母顺序,不是按时间,所以 v1.0、v10.0、v2.0 会排成 v1.0 → v10.0 → v2.0
怎么看到远程仓库的所有标签(包括未拉取的)
远程标签不会自动同步到本地,必须显式获取。很多人以为 git pull 会顺带把标签拉下来,其实不会——除非你配了 fetch = +refs/tags/*:refs/tags/* 在配置里,但默认不这样。
- 先运行
git fetch --tags:这会把远程所有标签引用下载到本地refs/tags/,但不会检出任何文件 - 再跑一次
git tag,就能看到新增的那些了 - 如果只想看远程有哪些、还不想拉下来,用
git ls-remote --tags origin,输出带哈希值,适合脚本解析
git tag -l 和 git tag 有什么区别
几乎没区别。git tag -l 是 git tag 的显式写法,功能完全一致;但加了 -l 后可以配合模式匹配,比如 git tag -l "v1.*" 只列 v1 开头的标签。
-
git tag -l "release-*"匹配 release- 开头的标签,注意引号防 shell 展开 -
git tag -l --sort=-version:refname按语义化版本倒序排(v2.0.0 在 v1.9.9 上面),需要 Git 2.19+ - 别用
git tag --list:虽然等价,但多敲三个字,且某些旧 Git 版本不认
附注标签和轻量标签在列表里根本分不出来
git tag 输出纯文本,只显示标签名,不告诉你它是 git tag v1.0 还是 git tag -a v1.0 -m "release" 打的。真要区分,得逐个查对象类型:
-
git cat-file -t v1.0返回tag就是附注标签,返回commit就是轻量标签 -
git show v1.0对附注标签会显示签名和消息,对轻量标签只显示提交内容 - CI 脚本里别依赖标签“看起来像附注”就认为可信——轻量标签也能叫 v1.0.0,但没签名、不可验证
标签不是分支,不会随 git pull 自动更新;每次想确认最新发布点,先 git fetch --tags 几乎是必选项,这点很容易被跳过。











