前言:
学习到这里,基本上git 里面的大部分都已经学习的差不多,剩下的就是熟能生巧,多多练习掌握的事情了。但是在分支管理里面,还有一个比较重要,也是很常见的就是"标签",标签是有别于svn 中一个比较特殊的东西。比较好用,且易于管理和体现。这一节就来学习一下。
创建标签
再说创建标签之前,我们先来说一下标签是啥?
发布一个版本的时候,我们通常先在版本库里打一个标签,这样,就唯一确定了打标签时刻的版本了。有点类似于快照,在VM和PS里面我们也可以打快照,这样,以后就可以随时回到这个状态,都不会丢失。同样在git 中打了标签后,将来无论在什么时候,这个标签的所有的历史版本信息都能取出来,不会丢失。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
我们接下来就来学习如何创建一个新的标签:
用
git tag name
命令,就可以在某一个分支上打上一个标签了:
$ git tag v1.0
这个时候,我们可以
用
git tag
命令
,查看找个分支上所有的标签:
$ git tag
v1.0
默认的创建标签,是在分支的的HEAD上创建的,也就是最新的提交上面。我们可以通过
git show tag_name
命令来查看这次标签的详细信息:
$ git show v1.0 commit bf30f1f74189bd33ba4a6c12c3184c7c4879a011 Merge: ae9e663 edf15c5 Author: iyangyi <yangyiphper@sina.cn> Date: Fri Oct 10 10:16:01 2014 +0800 confict diff --cc README.md index 5ffe0f3,2b24d0a..c7e41e4 --- a/README.md +++ b/README.md @@@ -2,4 -2,4 +2,8 @@@ Git is a distributed version control sy Git is free software. it is a good tool. distributed under the GPL. Git has a mutable index called stage. Git tracks changes. ++<<<<<<< HEAD +Creating a new branch is quick & simple. ++======= + Creating a new branch is quick AND simple. ++>>>>>>> dev
那么,可不可不在HEAD上打标签,在前几个commit上打呢?当然可以了。同样也是这个命令,只不过后面多加一个commit_id :
git tag tag_name commit_id
命令来完成在一个commit上打标签:
$ git tag v1.1 5575424
我们也可以给本次的提交加上说明,这样更好识别:$ git tag -a v1.2 -m "version 1.2 released"
$ git tag -a v1.2 -m "version 1.2 released" $ git show v1.2 tag v1.2 Tagger: iyangyi <yangyiphper@sina.cn> Date: Mon Oct 20 14:39:52 2014 +0800 version 1.2 released commit 50bf49c458e272c9729c6def589917348c61b136 Author: iyangyi <yangyiphper@sina.cn> Date: Mon Oct 13 15:27:11 2014 +0800 ddd diff --git a/test.txt b/test.txt index e4c6ef0..2c7bdfb 100644 --- a/test.txt +++ b/test.txt @@ -1 +1,2 @@ this file is will delete +hahahhahahah
操作标签
上面我们学习了如何创建标签等一些基本操作,创建错了,或者没用了,我们应该是可以删除它的,用
git tag -d tag_name
命令来删除。
$ git tag -d v1.2 Deleted tag 'v1.2' (was f04187d)
标签也是一个独特的分支,也是可以同步到远程的,如果我们在本地的标签已经ok了。那么如何,推送呢。也是 push 命令,
用
提示我们成功了。我们去github上看一下,果真推送成功了。
git push origin tag_name
命令,和push 分支有一点点不同。我们现在来推送下:
$ git push origin v1.0 Total 0 (delta 0), reused 0 (delta 0) To git@github.com:iyangyi/learngit.git * [new tag] v1.0 -> v1.0
那我们,我们本地有很多标签,一个一个推送,难免有些慢和繁琐。我们可以一次性全部推送嘛?当然:
用
git push origin --tags
命令,全部标签都被推送了。
$ git push origin --tags Counting objects: 1, done. Writing objects: 100% (1/1), 203 bytes | 0 bytes/s, done. Total 1 (delta 0), reused 0 (delta 0) To git@github.com:iyangyi/learngit.git * [new tag] v1.1 -> v1.1
如果,我们想删除远程的标签,咋搞,本地的删除很简单,远程的删除就有点麻烦了。我们要先删除本地的,再删除远程的:
git push origin :refs/tags/v1.1 (注意:origin 后面必须加个空格,再加冒号)
$ git tag -d v1.1 Deleted tag 'v1.1' (was 5575424) $ git push origin :refs/tags/v1.1 To git@github.com:iyangyi/learngit.git - [deleted] v1.1
-
命令git tag name用于新建一个标签,默认为HEAD,也可以指定一个commit id;
-
git tag -a tagname -m "blablabla..."可以指定标签信息;
-
命令git tag可以查看所有标签;
-
命令git push origin tagname可以推送一个本地标签;
-
命令git push origin --tags可以推送全部未推送过的本地标签;
-
命令git tag -d tagname可以删除一个本地标签;
-
命令git push origin :refs/tags/tagname可以删除一个远程标签。