分支与标签的区别
两者都是指向提交的引用,区别在可变性:分支是会移动的指针,随着新提交一路向前;标签是固定的锚点,一旦创建就始终指向那一次提交。开发用分支,发布点用标签。发布回溯依赖标签的不变性,把发布点做成标签比再开一个发布分支更轻。
基本信息
| 分支 | 可移动指针,用于持续开发 |
|---|---|
| 标签 | 固定指向某次提交,标注发布点与里程碑 |
| 保护 | 两类引用都可以配置保护规则 |
| 检出后的状态 | 检出标签会进入分离头指针状态 |
典型使用场景
- 每次发布在主干上打一个标签,标记确切的发布点
- 用标签做历史回溯与问题定位,结果稳定不会随时间漂移
- 长期维护的版本另开维护分支继续接收修复,同时保留原始发布标签
- 对重要标签加保护,防止被误移动或删除
- 用标签触发发布流水线,语义比用分支更明确
对比示例
对比示例
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.*' # 按模式列出标签对比
| 对比项 | 分支 | 标签 |
|---|---|---|
| 是否移动 | 随新提交前移 | 固定不变 |
| 典型用途 | 持续开发 | 标注发布点 |
| 保护配置 | 可配置保护规则 | 可配置保护规则 |
| 检出后的状态 | 正常位于分支上 | 进入分离头指针 |
分支和标签共享同一套保护机制,重要的发布标签建议开启保护,避免被移动或删除。
发布后如果还需要在该版本上继续修复,可以基于标签创建维护分支:这样既有固定的发布锚点,也有可以继续提交的分支。反过来,如果只建了分支而没打标签,后续分支上的提交会让「当时发布的是哪一版」变得难以回答。