Git标签
大约 3 分钟
Git 可以给仓库历史中的某一个提交打上标签,以示重要。 比较有代表性的 是人们会使用这个功能来标记发布结点( v1.0 、 v2.0 等等)。
Git 支持两种标签:轻量标签(lightweight)与附注标签(annotated)。
轻量标签:只是某个特定提交的引用。
附注标签:存储在 Git 数据库中的一个完整对象,。
附注标签是可以被校验的,其中包含打标签者的名字、电子邮件 地址、日期时间, 此外还有一个标签信息,并且可以使用 GNU Privacy Guard (GPG)签名并验证。
通常会建议创建附注标签,这样你可以拥有以上所有信息。但是如果你只是想用一个临时的标签, 或者因为某些原因不 想要保存这些信息,那么也可以用轻量标签。
标签的使用
列出标签
# 以字母顺序列出标签
git tag
# 显示匹配的标签
git tag -l "glob正则"
git tag --list "glob正则"附注标签
# 创建附注标签
git tag -a <tagname> -m "提交信息"
# 使用 -m 选项,存储提交信息到标签中。没有此选项时需要手动输入提交信息
# 查看标签信息与对应的提交信息
git show <tagname>轻量标签
git tag <tagname>
# 没有额外信息。git show 只会显示出提交信息。后期打标签
git tag -a <tagname> 校验和(或部分校验和)
# 使用log查看历史提交的校验和
# 取前7位即可
git log --pretty=oneline
# 9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
# ...
# git tag -a v1.2 9fceb02共享标签
默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。
git push <remote> <tagname>
# 把所有不在远程仓库服务器上的标签全部进行推送
git push <remote> --tags
# 不会区分轻量标签和附注标签,也没有简单的选项能够让只选择推送一种标签删除标签
# 从本地仓库中删除标签
git tag -d <tagname>
# 从远程仓库中删除标签
git push <remote> :refs/tags/<tagname> # 将冒号前面的空值推送到远程标签名,从而高效地删除它
git push <remote> --delete <tagname>检出标签
如果你想查看某个标签所指向的文件版本,可以使用 git checkout 命令。但这会使仓库处于 “分离头指针 detached HEAD” 状态。
在“分离头指针”状态下,如果你做了某些更改然后提交它们,标签不会发生变化, 但你的新提交将不属于任 何分支,并且将无法访问,除非通过确切的提交哈希才能访问。 因此,如果你需要进行更改,比如你要修复旧 版本中的错误,那么通常需要创建一个新分支。
$ git checkout 2.0.0
Note: checking out '2.0.0'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch>
HEAD is now at 99ada87... Merge pull request #89 from schacon/appendixfinal
$ git checkout 2.0-beta-0.1
Previous HEAD position was 99ada87... Merge pull request #89 from
schacon/appendix-final
HEAD is now at df3f601... add atlas.json and cover image