可以,而且 Git 里一个分支下可以有任意多个"版本" ,只不过要区分两种概念:commit(提交)和 tag(标签)。
每次 commit 就是一个版本快照
Git 把每次提交都当作项目在某一时刻的完整快照存储,所以分支上每提交一次,就相当于产生了"一个新版本"。一个分支下可以有无数个 commit,也就有无数个版本节点。
bash
git add .
git commit -m "feat: xxx" # 每次执行,分支指针就前移,产生一个新版本点
tag 是给某个版本"起名字"的固定标记
虽然每个 commit 天然就是一个版本,但 commit 哈希值不好记,所以 Git 提供 tag(标签) 来标记那些"重要"的版本,通常用于发布点(如 v1.0、v2.0)。
bash
git tag -a v1.0.0 -m "Release 1.0.0" # 给当前 commit 打上版本标签
git tag -a v2.0.0 <commit-hash> -m "..." # 也可以给历史某个 commit 打标签
一个分支上可以打 任意多个 tag ,比如在 master 分支上依次打 v1.0、v1.1、v2.0......这在语义化版本管理的项目里非常常见。
一个容易误解的点:tag 其实不是打在"分支"上
严格来说,tag 指向的是某个 commit,而不是分支本身。只是这些 commit 恰好都在某个分支的历史线上,所以习惯上会说"某个分支下的版本"。官方文档也明确说明:"In Git, you don't tag branches. You are tagging commits."(在 Git 里你不是在给分支打标签,而是在给提交打标签)。
小结
| 需求 | 做法 |
|---|---|
| 想在分支上不断产生新版本 | 正常地 commit 即可,每次 commit 都是新版本 |
| 想给某个正式发布的版本起个名字(如 v1.0.0) | 用 git tag -a v1.0.0 -m "..." |
| 想固定保存某个历史版本供日后回滚/查找 | tag 打在对应 commit 上即可 |
| 想开一条独立开发线 | 那是 branch(分支)的作用,与"版本"是两回事 |
| 所以答案是:一个分支下面既可以有 n 个 commit 版本,也可以打 n 个 tag 版本标签,数量没有限制。 |