github中有branch和tag,也就是分支和标签的概念。就我目前的理解而言,branch是用来存放最终代码的,而tag是用来描述你在开发过程中,是如何一步步到达最终目的,就像别人说的里程碑。比如你新建了多个tag,分别为v1.0 v2.0 v3.0….就是有很多个版本,然后v1.0是实现A功能,v2.0是实现A+B功能,v3.0是实现A+B+C功能。这就是tag的功能了,然后最后版本的tag在push到branch里。从存储上看,tag和branch是并列的,但是从我们给他的逻辑关系上看,tag是属于branch里的。
标签管理
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
为什么引入标签(tag)?
Git有commit,为什么还要引入tag?
“请把上周一的那个版本打包发布,commit号是6a5819e…”
“一串乱七八糟的数字不好找!”
如果换一个办法:
“请把上周一的那个版本打包发布,版本号是v1.2”
“好的,按照tag v1.2查找commit就行!”
所以,tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。
当我们在git版本控制中遇到了一些里程碑的commit,例如当我们的产品主要功能开发完成,可以交付给客户的时候,我们就可以创建一个tag来作为一个大版本标记,我们就可以在以后的某个时刻,快速定位一个开发阶段,方便我们创建一个branch或者checkout。
例如下面的图,就是利用github desktop在commit上创建一个tag

查看tag
// 查看tag,列出所有tag,列出的tag是按字母排序的,和创建时间没关系。 $ git tag v0.1 v1.3
显示tag详细信息
注意,标签不是按时间顺序列出,而是按字母排序的。可以用git show < tagname >查看标签信息:
//显示指定tag的信息 $ git show v1.4 tag v1.4 Tagger: Scott Chacon <schacon@gee-mail.com> Date: Mon Feb 9 14:45:11 2009 -0800 my version 1.4 commit 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge: 4a447f7... a6b4c97... Author: Scott Chacon <schacon@gee-mail.com> Date: Sun Feb 8 19:02:46 2009 -0800 Merge branch 'experiment'
创建tag
在Git中打标签非常简单,首先,切换到需要打标签的分支上,然后,敲命令git tag < name >就可以打一个新标签
默认标签是打在最新提交的commit上的。
//创建轻量级tag:这样创建的tag没有附带其他信息 git tag v1.0
//带信息的tag:-m后面带的就是注释信息,这样在日后查看的时候会很有用 git tag -a v1.0 -m 'first version'
上传tag到branch
//我们在执行 git push 的时候,tag是不会上传到服务器的,比如现在的github,创建 tag 后 git push ,在github网页上是看不到tag 的,为了共享这些tag,你必须这样: git push origin v1.0 或者 //将所有tag 一次全部push到github上。 git push origin --tags
删除tag
//删除本地tag git tag -d v1.0
//删除github远端的指定tag git push origin :refs/tags/v1.0.0