首页/开发/Git 与协作速查/分支与标签的区别

分支与标签的区别

分支是可移动指针(继续接收提交),标签是固定锚点(指向某次提交不变);开发用分支、发布用标签。

Git 与协作速查开发更新于 2026-10-13

分支与标签的区别

两者都是指向提交的引用,区别在可变性:分支是会移动的指针,随着新提交一路向前;标签是固定的锚点,一旦创建就始终指向那一次提交。开发用分支,发布点用标签。发布回溯依赖标签的不变性,把发布点做成标签比再开一个发布分支更轻。

基本信息

分支可移动指针,用于持续开发
标签固定指向某次提交,标注发布点与里程碑
保护两类引用都可以配置保护规则
检出后的状态检出标签会进入分离头指针状态

典型使用场景

  • 每次发布在主干上打一个标签,标记确切的发布点
  • 用标签做历史回溯与问题定位,结果稳定不会随时间漂移
  • 长期维护的版本另开维护分支继续接收修复,同时保留原始发布标签
  • 对重要标签加保护,防止被误移动或删除
  • 用标签触发发布流水线,语义比用分支更明确

对比示例

对比示例
git switch main && git commit -m 'feat: next step'   # 分支会随新提交前移
git tag -a v2.4.0 -m 'release 2.4.0'                 # 创建附注标签记录发布点
git push origin v2.4.0                                # 推送标签到远端
git show v2.4.0 --stat                                # 查看标签指向的提交内容
git tag -l 'v2.*'                                     # 按模式列出标签

对比

对比项分支标签
是否移动随新提交前移固定不变
典型用途持续开发标注发布点
保护配置可配置保护规则可配置保护规则
检出后的状态正常位于分支上进入分离头指针
分支和标签共享同一套保护机制,重要的发布标签建议开启保护,避免被移动或删除。
发布后如果还需要在该版本上继续修复,可以基于标签创建维护分支:这样既有固定的发布锚点,也有可以继续提交的分支。反过来,如果只建了分支而没打标签,后续分支上的提交会让「当时发布的是哪一版」变得难以回答。

易错点

  • 在标签上直接提交会处于分离头指针状态,容易产生忘记保留的悬空提交
  • 移动已经发布的标签会让依赖方对不上号,发布标签应当视为不可变
  • 把发布分支当成发布点长期依赖,分支被继续提交后就无法还原当时的版本
  • 只推分支不推标签,远端缺少发布锚点,自动化流程找不到对应版本

数据来源与参考

  • Pro Git 2nd Edition · 2.6 打标签
  • Git 官方文档:git-tag
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌