前言
这一节主要介绍Git
标签、别名与Git
的垃圾回收机制。
一、Git
标签(tag
)
1.标签的实质
标签与分支十分相似,都是指向某一次提交;并且,它们的值都为各自指向提交的SHA1
值;但是,不同于会随着提交的变化而变化的分支,一旦给某次提交添加了标签,该标签就永远不会发生变化。
**注意:**标签标识的是某一次提交,这次提交可以是任何分支上的任何一次提交。
两类标签
Git
标签有两种:
- 轻量级标签(
lightweight
):不可添加注释; - 带有附注的标签(
annotated
):可以添加注释;
Annotated tags are meant for release while lightweight tags are meant for private or temporary object labels.
以上是git
官方文档对两种标签的说明,大意是:带注释的标签用于发布,而轻量级标签则用于私人或临时对象。
什么时候打标签呢?
-
**版本发布:**一般
master
分支都会作为项目的发布分支,当项目开发到了一个成熟的阶段,准备在master
分支进行发布时。一般都会在master
分支的当前提交上打上一个类似"v1.2
"的标签;比如
Vue
框架:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rS9higAI-1587204460088)( http://ahuntsun.gitee.io/blogimagebed/img/git/lesson8/1.png)]
可以看到有许多标签,并且可以在
releases
选项中查看标签和发布版本: -
**版本管理:**可以通过标签的形式记录项目某一阶段的状态,方便管理;
比如管理学习微信小程序时每个知识点的代码:
查看标签文件
如下图所示,分别给master
分支的提交mas2
添加一个轻量级标签v1.0
和一个带有附注的标签v2.0
:
git dog
为git log --all --decorate --oneline --graph
的别名,后面会讲解;
随后,查看存储标签文件的.git/refs/tags
目录:
可以看到:
tags
目录下存储着添加的标签文件v1.0
和v2.0
;- 分别打开标签文件
v1.0
和v2.0
,它们的值都是一个SHA1
值,并且与添加标签时所在提交mas2
的SHA1
值6920a6e...
相等。 emm...
等等!并不相等呀,只有v1.0
的值与提交mas2
的SHA1
值相等,而与v2.0
的值并不相等!- 为什么给同一次提交
mas2
添加的标签,它们的SHA1
值会不相等呢?这是因为v1.0
是轻量级标签,而v2.0
是带有附注的标签。
虽然两个标签标记的都是同一次提交,但是它们的构造不一样:
-
轻量级标签
v1.0
直接将这次提交的SHA1
值作为自己的SHA1
值; -
而带附注的标签
v2.0
会创建一个tag
对象,它的SHA1
值是tag
对象的SHA1
值;
这就是轻量级标签与带有附注标签的区别。不过这两个标签仍然会指向同一次提交,如下图所示:
2.创建标签
git tag <tag_name>
创建一个轻量级标签:
git tag -a <tag_name> -m '注释'
创建一个带有附注的标签:
3.查看标签
git tag
显示添加的所有标签: