标签管理~创建标签、操作标签(十五)
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。过程如:标签(tag) → commit 。
Git有commit,为什么还要引入标签(tag)? “请把上周一的那个版本打包发布,commit号是6a5819e...”
“一串乱七八糟的数字不好找!” 如果换一个办法: “请把上周一的那个版本打包发布,版本号是v1.2” “好的,按照tag v1.2查找commit就行!” 所以,tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。
标签的意思是:
“我要找commit id是892b892a3f7...的那个版本”
“一串乱七八糟的数字怎么找?”
“我要找的commit id是打了tag “v1.1”的那个版本”
“找到了:git show v1.1”
标签就是跟某个 commit 版本号 关联起来,便于发布和查找 ;
创建标签
在Git中打标签(tag)非常简单,首先,切换到需要打标签(tag)的分支上(如果说主分支master 需要打标签,就切换到主分支master上),如下:
然后,输入命令 git tag <name> 就可以打一个新标签(tag),如下:
可以用命令 git tag 查看所有标签(tag),如下:
默认标签(tag):是打在最新提交的 commit 上的。有时候,如果忘了打标签(tag), 比如,现在已经是周五了,但应该在周一打的标签(tag)没有打,怎么办?方法:是找到历史提交的 commit id ( 第五篇 git log )版本号,然后打上标签(tag)就可以了,如下:
假如 说要对 add merge 这次提交打标签(tag),它对应的 commit id (版本号) 是 f4047e5,输入命令,如下:
再用命令 git tag 查看标签(tag),如下:
注意,标签(tag)不是按时间顺序列出,而是按字母排序的。可以用 git show <tagname> 查看标签(tag)信息,如下:
可以看到, v0.9 确实打在 add merge 这次提交上。还可创建带有说明的标签(tag),用-a指定标签(tag)名,-m指定说明文字, 以版本号 commit id 为 a0297d1 的 confilect fixed 为例,如下:
用命令 git show <tagname> 可以看到说明文字,如下:
注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签
综上所述: 目前已有3个 commit 打了标签(tag),如下:
分别是:
小结:
-
命令 git tag <tagname> 用于新建一个标签,默认为HEAD,也可以指定一个 commit id(版本号) 来设置标签(tag);
-
命令 git tag -a <tagname> -m "文字说明" commit id 表示可以指定标签(tag)信息;
-
命令 git tag 可以查看所有标签(tag)。
-
命令 git show <tagname> 查看标签(tag)信息;
操作标签
如果标签(tag)打错了,也可以删除,如下:
因为创建的标签(tag)都只存储在本地,不会自动推送到远程。所以,打错的标签(tag)可以在本地安全删除。如果要推送某个标签(tag)到远程,使用命令 git push origin <tagname>,如下:
或者,一次性推送全部尚未推送到远程的本地标签(tag),如下:
如果标签(tag)已经推送到远程,要删除远程标签(tag)就麻烦一点,先从本地删除,如下: v0.9举例
然后,从远程删除。删除命令也是push,但是格式如下:( :refs/tags/<tagname> )
综上所述:整个删除过程:先从本地删除标签(tag)→然后再从远程删除标签(tag)。
要看看是否真的从远程库删除了标签(tag),可以登陆GitHub网站查看。
小结:
-
命令 git push origin <tagname> 可以推送某一个本地标签(tag)到远程;
-
命令 git push origin --tags 可以一次性推送全部未推送过的本地标签(tag)到远程;
-
命令 git tag -d <tagname> 可以删除某一个本地标签(tag);
-
命令 git push origin :refs/tags/<tagname> 可以删除某一个远程标签(tag);
如果标签(tag)已推送到远程,需要删除远程标签(tag)则执行3,4步骤;
转自:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000