「标签」并非 Git 的主要和必须功能, 但善用标签,对项目也很有益处。项目发布的版本,我们一般用 tag 来标记,作为存档,并不再修改,比如
Branch 一般用作平常开发。Tag 能做的 branch 都能,但将发布用的版本存档以 tag 标记可使 branch 的功能更纯粹。
通过指令 git tag --help
可以查看官方参考文档。
(如果你在执行这些代码时的输出结果为空,请参考2. 创建标签制作一些标签再来做本节的实验)
查看本地库的所有标签
$ git tag
or
$ git tag --list
它可以和 grep
指令结合去找包含某个字串的标签,如
$ git tag | grep v0.0
查看远程库的所有标签
$ git ls-remote --tags
这条指令如果不需要在本地库的目录里运行,可以添加上远程库的地址就行了,即
$ git ls-remote --tags {remote repo URL}
给当前版本打上 v0.01 的标签:
$ git tag v0.01
上面是创建一个轻量标签,如果需要创建标注标签,用下面的方式:
$ git tag -a v0.01 -m "This is a demo to create an anotation tag"
有关轻量标签和标注标签的不同,可以参考本站的《Git 的两种 Tag 的平行对比实验》。
将标签推送到远程:
$ git push origin v0.01
这条指令和推送 branch 的,并无什么区别。但如果有同名的 branch 和 tag,就要用 tag 的全称才能推送成功,如:
$ git push origin refs/tags/v0.01
还可以加 --force
覆盖原先的同名标签
$ git push origin refs/tags/v0.01 --force
本地的 tag 不能直接覆盖,可以先把原先的 tag 删了,再重新创建。
一次性推送全部尚未推送到远程的本地标签:
$ git push origin --tags
可以在任意分支上执行下面的语句
$ git fetch --all
它的本意是获取远程的所有变化,自然也将 tag 获取了。
删除本地的标签
$ git tag --delete v0.01
--delete
可以简作 -d
删除远程 tag:
$ git push origin --delete v0.01
如果 tag 和 branch 有重名,删除指令需要使用完整的 tag 名:
$ git push origin --delete refs/tags/v0.01
可以一次删除多个标签:
$ git push origin --delete v0.01 v0.02 v0.03
如果要使用标签点的代码,可以用 switch
或 checkout
完成。
$ git switch v0.03 -c v003
Switched to a new branch 'v003'
或
$ git checkout v0.02 -b v002
Switched to a new branch 'v002'