Skip to main content

使用标签Tag

简介

Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针。

使用场景:

“请把上周一的那个版本打包发布,commit号是6a5819e...”

“一串乱七八糟的数字不好找!”

如果换一个办法:

“请把上周一的那个版本打包发布,版本号是v1.2”

“好的,按照tag v1.2查找commit就行!”

所以,tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。

说白了,就是因为 commit 的名称无法自定义,不方便查找和回退,所以就有了tag这个需求

基础语法

git tag [-a | -s | -u <keyid>] [-f] [-m <msg> | -F <file>]
<tagname> [<commit> | <object>]
git tag -d <tagname>
git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
[--points-at <object>] [--column[=<options>] | --no-column]
[--create-reflog] [--sort=<key>] [--format=<format>]
[--[no-]merged [<commit>]] [<pattern>]
git tag -v [--format=<format>] <tagname>…//原文出自【易百教程】,商业转载请
git tag flag <tagName> <commitId|

flag:

  • -a:带注释的标签
  • -m:选项则指定了对应的标签说明
  • -f:强制创建标签,如果已存在,则覆盖
  • -s(signed): 使用签名,
  • -v:验证标签

如果传递了-a-s-u <keyid>中的一个,该命令将创建一个标签对象,并且需要一个标签消息。 除非-m <msg>-F <file>,否则将启动一个编辑器,供用户输入标签消息。

使用签署标签

如果你有自己的私钥,还可以用 GPG 来签署标签,只需要把之前的选项 -a 改为 -s (译注: 取 signed 的首字母)即可:

git tag -s v1.5 -m 'my signed 1.5 tag'
You need a passphrase to unlock the secret key for
user: "Scott Chacon <schacon@gee-mail.com>"
1024-bit DSA key, ID F721C45A, created 2009-02-09

查看标签

显示的标签按字母顺序排列,所以标签的先后并不表示重要程度的轻重。

git tag

验证标签

可以使用 git tag -v [tag-name] 此命令会调用 GPG 来验证签名,所以你需要有签署者的公钥,存放在 keyring 中,才能验证:

git tag -v v1.4.2.1

object 883653babd8ee7ea23e6a5c392bb739348b1eb61
type commit
tag v1.4.2.1
tagger Junio C Hamano <junkio@cox.net> 1158138501 -0700

GIT 1.4.2.1

Minor fixes since 1.4.2, including git-mv and git-http with alternates.
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
gpg: Good signature from "Junio C Hamano <junkio@cox.net>"
gpg: aka "[jpeg image of size 1513]"
Primary key fingerprint: 3565 2A26 2040 E066 C9A7 4A7D C0C6 D9A4 F311 9B9A

创建标签

Git 使用的标签有两种类型:

  • 轻量级的(lightweight)
  • 含附注的(annotated)

轻量级的(lightweight)

git tag <tagName>

轻量级标签实际上就是一个保存着对应提交对象的校验和信息的文件。要创建这样的标签,一个 -a-s-m 选项都不用,直接给出标签名字即可:

git tag v1.4-lw

后期加注标签

git tag -a v1.2 9fceb02

含附注的(annotated)

含附注标签,实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用 GNU Privacy Guard (GPG) 来签署或验证。一般我们都建议使用含附注型的标签,以便保留相关信息;

git tag -a v1.4 -m 'my version 1.4'

删除标签(本地)

git tag -d [tagname]

git tag -d v1.0

删除标签(远程)

# 显示远程的标签
git show-ref --tag

# 用push, 删除远程tag
git push origin :refs/tags/“标签”

# 实测可以
git push origin --delete v2.2.2

分享标签(远程仓库)

默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。其命令格式如同推送分支,

运行 git push origin [tagname] 即可:

git push origin v1.5

如果要一次推送所有本地新增的标签上去,可以使用 --tags 选项:

git push origin --tags

现在,其他人克隆共享仓库或拉取数据同步后,也会看到这些标签。

拉取标签(远程仓库)

git 默认不会拉取标签,需要自己手动添加

git fetch --tags

git fetch -t origin

git fetch -t origin master

参阅资料