Git--标签管理

本文来自于:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013762144381812a168659b3dd4610b4229d81de5056cc000

一。标签管理

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。

Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。

Git有commit,为什么还要引入tag?

“请把上周一的那个版本打包发布,commit号是6a5819e...”

“一串乱七八糟的数字不好找!”

如果换一个办法:

“请把上周一的那个版本打包发布,版本号是v1.2”

“好的,按照tag v1.2查找commit就行!”

所以,tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起

二。创建标签

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

  1. $ git branch
  2. * dev
  3. master
  4. $ git checkout master
  5. Switched to branch 'master'

然后,敲命令git tag <name>就可以打一个新标签:

  1. $ git tag v1.

可以用命令git tag查看所有标签:

  1. $ git tag
  2. v1.

默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?

方法是找到历史提交的commit id,然后打上就可以了:

  1. $ git log --pretty=oneline --abbrev-commit
  2. 12a631b (HEAD -> master, tag: v1., origin/master) merged bug fix
  3. 4c805e2 fix bug
  4. e1e9c68 merge with no-ff
  5. f52c633 add merge
  6. cf810e4 conflict fixed
  7. 5dc6824 & simple
  8. 14096d0 AND simple
  9. b17d20e branch test
  10. d46f35e remove test.txt
  11. b84166e add test.txt
  12. 519219b git tracks changes
  13. e43a48b understand how stage works
  14. 1094adb append GPL
  15. e475afc add distributed
  16. eaadf4e wrote a readme file

比方说要对add merge这次提交打标签,它对应的commit id是f52c633,敲入命令:

  1. $ git tag v0. f52c633

再用命令git tag查看标签:

  1. $ git tag
  2. v0.
  3. v1.

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

  1. $ git show v0.
  2. commit f52c63349bc3c1593499807e5c8e972b82c8f286 (tag: v0.)
  3. Author: Michael Liao <askxuefeng@gmail.com>
  4. Date: Fri May :: +
  5.  
  6. add merge
  7.  
  8. diff --git a/readme.txt b/readme.txt
  9. ...

可以看到,v0.9确实打在add merge这次提交上。

还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:

  1. $ git tag -a v0. -m "version 0.1 released" 1094adb

用命令git show <tagname>可以看到说明文字:

  1. $ git show v0.
  2. tag v0.
  3. Tagger: Michael Liao <askxuefeng@gmail.com>
  4. Date: Fri May :: +
  5.  
  6. version 0.1 released
  7.  
  8. commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (tag: v0.)
  9. Author: Michael Liao <askxuefeng@gmail.com>
  10. Date: Fri May :: +
  11.  
  12. append GPL
  13.  
  14. diff --git a/readme.txt b/readme.txt
  15. ...

注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签

 小结

  • 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;

  • 命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;

  • 命令git tag可以查看所有标签。

三。操作标签

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

  1. $ git tag -d v0.
  2. Deleted tag 'v0.1' (was f15b0dd)

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

如果要推送某个标签到远程,使用命令git push origin <tagname>

  1. $ git push origin v1.
  2. Total (delta ), reused (delta )
  3. To github.com:michaelliao/learngit.git
  4. * [new tag] v1. -> v1.

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

  1. $ git push origin --tags
  2. Total (delta ), reused (delta )
  3. To github.com:michaelliao/learngit.git
  4. * [new tag] v0. -> v0.

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:

  1. $ git tag -d v0.
  2. Deleted tag 'v0.9' (was f52c633)

然后,从远程删除。删除命令也是push,但是格式如下:

  1. $ git push origin :refs/tags/v0.
  2. To github.com:michaelliao/learngit.git
  3. - [deleted] v0.

要看看是否真的从远程库删除了标签,可以登陆GitHub查看。

小结

  • 命令git push origin <tagname>可以推送一个本地标签;

  • 命令git push origin --tags可以推送全部未推送过的本地标签;

  • 命令git tag -d <tagname>可以删除一个本地标签;

  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

相关Git学习参考博客:

https://blog.csdn.net/xiaohanluo/article/details/53214933

Git教程,里面有介绍到Git的工作原理,可以仔细阅读。

Git Community Book 中文版介绍了Git具体使用,这本书也是关于Git的一本好书。

Git练习,实战练习Git的各种指令

Git015--标签管理的更多相关文章

  1. C#开发微信门户及应用(37)--微信公众号标签管理功能

    微信公众号,仿照企业号的思路,增加了标签管理的功能,对关注的粉丝可以设置标签管理,实现更加方便的分组管理功能.开发者可以使用用户标签管理的相关接口,实现对公众号的标签进行创建.查询.修改.删除等操作, ...

  2. Laravel大型项目系列教程(五)之文章和标签管理

    一.前言 本节教程将大概完成文章和标签管理以及标签关联. 二.Let's go 1.文章管理 首先创建管理后台文章列表视图: $ php artisan generate:view admin.art ...

  3. [译]:Orchard入门——使用标签管理内容

    原文链接:Organizing Content Using Tags 在Orchard中,内容项可以使用标签来分类,同时,通过格式为 ~/tags/tag-name 的url可以直接查看包含对应标签关 ...

  4. git学习:多人协作,标签管理

    多人协作: 查看远程库的信息, git remote 推送分支到远程库 git push origin master/dev 注意:master是主分支,时刻需要与远程同步 dev是开发分支,也需要与 ...

  5. 动易CMS之标签管理

    一.如何添加一个标签 1.系统设置->模板标签管理->添加标签 2.输入标签名称,根据需要选择数据设置: sql语句则选择[系统数据库SQL查询] 3.添加参数 4.系统可以根据设置的条件 ...

  6. 在Eclipse中用TODO标签管理任务

    在Eclipse中用TODO标签管理任务 Elipse为Java项目的时候,有一个很人性化的“任务管理”功能,利用这个功能可以方便地将项目中一些需要处理的任务记录下来.先来看看“任务管理”是怎么使用的 ...

  7. 微信开发第4章 通过accesstoken获取用户标签管理

    通过access_token获取用户标签管理: 1.获取标签列表 调用接口为: http请求方式:GET(请使用https协议) https://api.weixin.qq.com/cgi-bin/t ...

  8. Git标签管理

    一般我们发布一个新版本到线上服务器时都会在版本库中打一个标签,这时就确定了某个版本将发布到线上.我们可以随时可以查看这个打标签的版本,也就 是说标签其实呢,就是版本库中一个快照.简单说标签就是指向某个 ...

  9. kubernetes云平台管理实战:deployment通过标签管理pod(十)

    一.kubectl run命令拓展 1.RC创建 [root@k8s-master ~]# kubectl run web --generator=run/v1 --image=10.0.128.0: ...

  10. 【学习总结】Git学习-参考廖雪峰老师教程七-标签管理

    学习总结之Git学习-总 目录: 一.Git简介 二.安装Git 三.创建版本库 四.时光机穿梭 五.远程仓库 六.分支管理 七.标签管理 八.使用GitHub 九.使用码云 十.自定义Git 期末总 ...

随机推荐

  1. spring-security问题记录

    一.错误信息 Could not decode JSON for additional information: BaseClientDetails 2019-12-03 22:18:37.239 W ...

  2. js超简单冒泡算法

    点击按钮--从大到小排序,可以通过代码中大于号小于号的选择来判定从小到大或者从大到小. <!DOCTYPE html> <html> <head> <titl ...

  3. k8s存储

    ·几种存储类型 1)emptyDir emptyDir Volume的生命周期与Pod一致,Pod中的所有容器都可以共享Volume,它们可以指定各自的mount路径,当Pod从节点删除时,Volum ...

  4. opencv windows源码编译

    WITH_QT//H:\software\programming\qt\5.12.3\mingw73_32\lib\cmake  5.6的路径要改这样 WITH_OPENGL 编译器mingw32-m ...

  5. Linux中的sshd服务

    Linux中的sshd服务,主要用于pst终端,远程连接到linux服务中 看sshd服务状态 service sshd status 停止sshd服务 service sshd stop 启动ssh ...

  6. oracle 11g 执行先决条件检查失败的解决方法

    在安装oracle 11g时,出现执行先决条件失败的情况如下: 你可以忽略所有强制安装,一般不会影响功能,但如果你想知道为什么会产生这种错误, 并且当出现以上情况时又该如何解决呢?如下列出了原因和解决 ...

  7. Python---基础---循环,函数

    2019-05-21 ----------------------------------- # 打印出一个矩形# 控制行for i in range(1, 5):    #控制列    for j ...

  8. 【leetcode】1046. Last Stone Weight

    题目如下: We have a collection of rocks, each rock has a positive integer weight. Each turn, we choose t ...

  9. python每日练习0730

    """ 1. 现有面包.热狗.番茄酱.芥末酱以及洋葱,数字显 示有多少种订购组合, 其中面包必订,0 不订,1 订,比如 10000,表示只订购面包 "&quo ...

  10. POJ 1797 Heavy Transprotation ( 最短路变形 || 最小生成树 )

    题意 : 找出 1 到 N 点的所有路径当中拥有最大承载量的一条路,输出这个最大承载量!而每一条路的最大承载量由拥有最大承载量的那一条边决定 分析 : 与 POJ 2253 相似且求的东西正好相反,属 ...