返回知识库

版本协作 · 版本协作

版本标签Tag

tag 是钉在某一枚提交上的固定命名锚点;annotated tag 适合发布,已发布后不要改写。

先认出钉在提交上的封印,再看它为什么不跟着 main 走

下面就是仓库里的 annotated tag。默认 v1.2.0 钉在 e3f4g5h;想挪到新提交会被拒绝;新内容要另打 v1.2.1。

第 0 步先打开:终端跑 git tag -l,或在仓库 Releases 里看版本名。下面就是钉在提交上的那枚标签。

annotated tag钉住 e3f4g5h

v1.2.0

e3f4g5h修复登录失败清空密码

9d2e8a4 · main 已前移

封印不走

新提交到来,分支指针跟着走。v1.2.0 仍指向打标时的那枚提交。

原因:annotated tag 是固定指针。下一步:看有人想把它挪到新提交会怎样失败。

知识点:固定指针,不是会跑的分支

封印刚走过的路,这里只给命名。

  • tag 指向某一枚 commit,不会随新提交前移。
  • annotated tag 带消息、作者、日期,适合发布。
  • 默认不随 git push 走,要 git push --tags
  • 已发布标签不要改写;要标新内容就打新版本。

什么时候用、怎么用

发布需要一个不会跑掉的名字时再打。

  • 信号:这一刻的构建要进 changelog、回滚或商店版本。
  • 最短路径:git tag -a v1.2.0 -m "Release v1.2.0" → 核对指向的 commit → git push --tags
  • 不适用:日常开发用分支;不要把已发 v1.2.0 挪到另一枚提交。

正反例:同一次发布,只改标签有没有被挪

只改变「版本名是否还指向同一份内容」,回滚完全不同。

正例v1.2.0 钉住,热修打 v1.2.1

商店和 changelog 仍指向同一份构建。回滚按版本名就能找到原来的提交。

反例把已发 v1.2.0 挪到新提交

有人已经按旧 tag 发布。同一名字指向两份内容,回滚和排查都会对错包。

快速自测

v1.2.0 已经推到远端,后来又修了一个空态。哪种做法对?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。