(六) Git--标签管理

在发布版本时,我们通常先在版本库打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来,所以标签也是版本库的一个快照.
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的.
Git有了commit,为什么还要引入tag呢?
因为commit号是3b5819e...一串乱七八糟的数字不好找.而tag可以根据需要任意命名,让人非常容易记住,它跟某个commit绑定在一起.

创建标签

在Git中打标签,首先,需要切换到需要打标签的分支上:

$ git branch
* dev
  master
$ git checkout master
Switched to branch 'master'

然后,敲命令git tag <name>就可以打一个标签:
$ git tag v1.0
可以用命令git tag查看所有标签:

$ git tag
v1.0

默认标签是打在最新提交的commit上的,有时候,如果忘了打标签,需要给之前的提交打上标签,怎么办呢?
方法是找到历史提交的commit id,然后打上就可以了:

$ git log --pretty=oneline --abbrev-commit
b95bbf0 conflict fixed
c2e47c0 & simple
89cdc59 AND simple
fae4e76 忽略不要的文件
e151f7e add README.md
3fafa4a remove test.txt
c291807 add test.txt
6d99443 boss
8b33073 git tracks changes
3557835 Revert "add aaa"
9b4fd89 add aaa
94bf088 append microService
8cf77e4 add code for theme
92b6075 add spring-boot sample
5ad5c1f add a readme file

比方说要对& simple这次提交打标签,它对应的commit id是c2e47c0,敲入命令:
$git tag v0.8 c2e47c0
再用命令git tag查看:

$ git tag
v0.8
v1.0

这里需要注意,标签不是按时间顺序列出的,而是按字母排序的,可以用git show <tagname>查看标签信息:

$ git show v0.8
commit c2e47c06db550e03b2c19ee5247b03d949a10541
Author: alan7c <chong_luo@kingdee.com>
Date:   Fri Mar 17 17:42:44 2017 +0800

    & simple

diff --git a/README.md b/README.md
index 342d90d..0a28620 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,2 @@
 # spring-boot-mongo

还可以创建带有说明的标签,用-a指定标签名,-m指定说明的文字:
$ git tag -a v0.9 -m "version 0.9 master" b95bbf0
用命令git show <gitname>可以看到说明文字:

$ git show v0.9
tag v0.9
Tagger: alan7c <chong_luo@kingdee.com>
Date:   Mon Mar 27 16:29:13 2017 +0800

version 0.9 master

commit b95bbf0ac897b2d88fa4bcf0308913f624d566c7
Merge: c2e47c0 89cdc59
Author: alan7c <chong_luo@kingdee.com>
Date:   Fri Mar 17 17:48:28 2017 +0800

    conflict fixed

小结

  • 命令git tag <name>用于创建一个标签,默认为HEAD,也可以指定一个commit id;
  • git tag -a <tagname> -m "balabalalbala.." commit id可以指定标签信息;
  • 命令git tag可以查看所有标签.

操作标签

如果标签打错了,也可以删除标签:

$ git tag -d v0.8
Deleted tag 'v0.8' (was c2e47c0)

因为创建的标签都是只存储在本地,不会自动推送到远程,所以打错的标签也可以在本地安全删除.
如果要推送某个标签到远程,使用命令git push origin <tagname>:

$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To git@github.alanluochong/spring-boot-test.git
 * [new tag]         v1.0 -> v1.0

或者一次性推送全部尚未推送到远程的本地标签:

$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 554 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git
 * [new tag]         v0.2 -> v0.2
 * [new tag]         v0.9 -> v0.9

如果标签已经推送到远程,要删除远程标签就麻烦一点,但是格式如下:

$ git push origin :refs/tags/v0.9
To git@github.com:alanluochong/spring-mongo-test.git
 - [deleted]         v0.9

小结

  • 命令git push origin <tagname>可以推送一个本地标签到远程;
  • 命令git push origin --tags可以推送全部未推送过的本地标签;
  • 命令git tag -d <tagname>可以删除一个本地标签;
  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值