Git基础学习之tag标签操作详解

目录
  • 共享标签
    • 推送本地的指定标签
    • 推送本地所有为推送的标签
    • 查看结果
  • 删除标签
    • 删除本地标签
    • 删除远程标签
  • 修改标签指定提交的代码
  • 标签在.git目录中的位置
  • 本文中所使用到的命令

共享标签

默认情况下,git push 命令并不会传送标签到远程仓库服务器上。

在创建完标签后,你必须显式地(手动)推送标签到远程服务器上。

需要将标签推送到远程版本库作为一个发行版本,可以通过以下两种方式:

推送本地的指定标签

这个过程就像共享远程分支一样,你可以执行命令: git push origin <tagname>

$ git push origin v1.5
Counting objects: 14, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.
Total 14 (delta 3), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
 * [new tag]         v1.5 -> v1.5

推送本地所有为推送的标签

如果想要一次性推送很多标签,也可以使用带有 --tags 选项的 git push 命令。

这将会把所有不在远程仓库服务器上的标签全部推送过去。

$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
 * [new tag]         v1.4 -> v1.4
 * [new tag]         v1.4-lw -> v1.4-lw

当然其他人从仓库中克隆或拉取,他们也能得到你的那些标签。

说明:

  • git push 推送两种标签使用 git push <remote> --tags 命令(remote:远程仓库)。
  • 推送标签并不会区分轻量标签和附注标签, 没有选项能够让你只选择一种标签进行推送。

查看结果

登录GitHub并打开远程版本库页面,在release中可以查看推送到远程库中的标签,即发行版本。

其他用户在更新本地版本库时,同时会将标签一并更新,然后可以在本地指定标签版本上,作一个新的分支进行开发,开发完成后再合并到主要分支上,最后将该分支删除。

删除标签

删除本地标签

要删除掉本地仓库上的标签,可以使用命令 git tag -d <tagname>

例如,可以使用以下命令删除一个轻量标签:

$ git tag -d v1.4-lw
Deleted tag 'v1.4-lw' (was e7d5add)

注意上述命令并不会从任何远程仓库中移除这个标签。

删除远程标签

你必须用命令: git push <remote> :refs/tags/<tagname> 来更新你的远程仓库。

提示:若要删除远程库中的标签,首先要删除本地库中的该标签,然后再运行上面的命令。

第一种方式是 git push <remote远程库> :refs/tags/<tagname> :

$ git push origin :refs/tags/v1.4-lw
To /git@github.com:schacon/simplegit.git
 - [deleted]         v1.4-lw

上面这种操作的含义是,将冒号前面的空值推送到远程标签名,从而高效地删除它。

第二种更直观的删除远程标签的方式是:

$ git push origin远程库 --delete <tagname>

修改标签指定提交的代码

问题一:

软件版本一旦被指定,即标签一旦与某一commit-id绑定,那么这个版本(提交)的代码还能修改吗?

  • 若将master分支回退到该commit-id,然后再修改代码,修改完成后再提交,我们会发现该提交代码修改过了,但该标签绑定的commit-id并没有发生变化,即该软件版本(标签)指向的代码仍未修改。(也就是标签指向的提交没有改变)
  • 当然,此时我们可以将该标签删除,然后再定义一个同名标签,与修改过代码的提交进行绑定,这样也是可以的。

问题二:

但是如上操作存在一个巨大的风险,我们修改过的代码是master主分支上的,一旦修改过的代码出现问题,将可以导致整个代码出问题。所以,我们一般不会修改master主分支上的代码。那应该怎么办?

  • Git将标签定义为与分支同级别的概念,它不仅是一个提交的别名。
  • Git允许程序员使用分支切换命令git checkout ,将代码转向标签所指定的版本。

小示例:

# 1.查看当前版本库分支
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git tag
v1.0
v2.0

# 2.切换到v1.0标签上
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learning_github (master)
$ git checkout v1.0
Note: switching to 'v1.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 69fc420 第二次提交,添加v2版内容

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learning_github ((v1.0))
$

如上,命令执行完毕,系统给出了很多的提示,该提示的总体意思为:当前处于“分离头指针”状态,在该状态下用户的任何修改与提交对任何的分支都没有影响(言外之意是:其修改将不会被保留)。若想要保留修改,则可以通过git checkout -b命令,创建一个新的分支。

这里特别要注意一点,就是最后一行命令提示符末尾的((v1.0)),说明此时HEAD指针,指向了v1.0标签。

继续执行命令:

# 3.执行git checkout -b 命令,是新的提交有分支指向
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learning_github ((v1.0))
$ git checkout -b newbranch
Switched to a new branch 'newbranch'

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learning_github (newbranch)
$

我们可以看到HEAD指针由(v1.0)标签指向了newbranch分支上。在该新分支上再进行修改提交,然后再合并到master分支,最后再将该分支删除,此时创建的分支名称可以随意。

newbranch分支合并到master分支后,仍需要删除原标签,然后再与新的commit-id绑定。所以,生产环境下,一旦标签定义完成,就不会对标签进行删除再绑定。而是会再定义一个新的标签与新的提交绑定。

标签在.git目录中的位置

无论是轻量标签还是附注标签,他们都会存在在.git/refs/tags目录中。

# 1.查看.git/refs/tags目录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ ll .git/refs/tags/
total 2
-rw-r--r-- 1 L 197121 41  4月 18 17:12 v1.0
-rw-r--r-- 1 L 197121 41  4月 19 20:46 v2.0

# 2.查看v1.0标签的内容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git cat-file tag v1.0
object b97ccfd5f3e98c12ab9c0fb4ca4b308e6805f7ed
type commit
tag v1.0
tagger sun_wk <sun_wk@126.com> 1618737173 +0800

v1.0 里程碑

# 3.查看v1.0标签内容中object的类型
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git cat-file -t  b97ccfd5f3e98c12
commit
# 我们可以看到object对象的类型是commit对象,
# 是一个提交,所以索引的是一个提交。

# 4.查看V1.0标签文件中的内容,可以看到也是一个对象的索引
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ cat .git/refs/tags/v1.0
e086427dfe88d8cd370d2f94eaf8610c169a3333

# 5.查看这个对象的类型
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git cat-file -t e086427
tag
# 我们可以查看该对象是一个标签对象。

# 6.我们也可以通过tag对象的索引值,查看内容,
# 和上边git cat-file tag v1.0命令显示的内容是一样的。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git cat-file -p e086427
object b97ccfd5f3e98c12ab9c0fb4ca4b308e6805f7ed
type commit
tag v1.0
tagger sun_wk <sun_wk@126.com> 1618737173 +0800

v1.0 里程碑

总结来说:

  • Git中的标签,都会以文件的形式存储在.git/refs/tags目录中。
  • 文件中记录的是tag标签的校验和(索引值)。
  • 通过索引值或者标签名可以查看该tag对象的内容。
  • tag对象的内容就包括他指向的commit。其实tag对象就是对commit对象的一个封装。

本文中所使用到的命令

git tag:查看版本库中的标签列表。

git tag -l "v1.8.5*":查看版本库中,可匹配的标签列表。

git tag -a 标签名 -m '说明信息':当前分支最新一次提交打标签。

git tag -a 标签名 commit-id -m '说明信息':为之前的提交打标签。

git tag 标签名:创建轻量标签。

git push 远程仓库名 标签名:推送标签到远程仓库。

git push 远程仓库名 --tags:推送所有标签到远程仓库。

git tag -d 标签名 :删除本地版本库中的标签。

git show 标签名:擦看标签的具体信息。

到此这篇关于Git基础学习之tag标签操作详解的文章就介绍到这了,更多相关Git内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Git中tag标签的使用教程

    目录 一.tag简介 二.tag使用命令 1.列出所有tag 2.查看tag信息 3.创建tag 4.创建带注释tag 5.推送tag 6.特定commit_id创建tag 7.删除tag 8.检出tag 9.切换tag 10.为之前提交的添加tag 11.重命名tag 一.tag简介 tag是git版本库的一个标记,指向某个commit的指针.tag主要用于发布版本的管理,一个版本发布之后,我们可以为git打上 v.1.0.1 ,v.1.0.2 …这样的标签.tag感觉跟branch有点相似,

  • Git 标签使用详解

    Git跟其他版本控制系统一样,可以打标签(tag)标记一个版本号. 发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照. Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的. 一.列出标签 1. 列出当前仓库的所有标签:git tag 2. 列出所有标

  • Git Tag 标签详解

    Git Tag 标签 git tag 按字母排序显示标签 git tag v1.01 打上v1.01这个标签 git show v1.01 显示这个标签的详情 可以同时打多个tag指向同一个时间点上的版本 git push origin --tags 推送本地所有新增标签到远端 ps:下面看下git命令之git tag 给当前分支打标签 列出标签 $ git tag # 在控制台打印出当前仓库的所有标签 $ git tag -l 'v0.1.*' # 搜索符合模式的标签 打标签 git标签分为两

  • Git基础学习之标签tag的使用详解

    目录 1.标签介绍 2.列出标签 3.创建标签 (1)标签的分类 (2)附注标签 (3)轻量标签 4.后期打标签 1.标签介绍 软件的某个发行版本所对应的,其实就是软件开发过程中,某一个阶段的最后一次git commit提交.我们知道每一个提交操作,对应的都会生成一个commit-id,而标签就是与某一个commit-id绑定的名称.一个标签一旦与某一个commit-id绑定,那么该标签就不能修改绑定到其它commit-id了,除非将该标签删除后才可以与其commit-id绑定. 标签对象(ta

  • Git 教程之标签详解

    Git 标签 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签. 比如说,我们想为我们的 w3cschoolcc 项目发布一个"1.0"版本. 我们可以用 git tag -a v1.0 命令给最新一次提交打上(HEAD)"v1.0"的标签. -a 选项意为"创建一个带注解的标签". 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解. 我推荐一直创

  • Git基础学习之tag标签操作详解

    目录 共享标签 推送本地的指定标签 推送本地所有为推送的标签 查看结果 删除标签 删除本地标签 删除远程标签 修改标签指定提交的代码 标签在.git目录中的位置 本文中所使用到的命令 共享标签 默认情况下,git push 命令并不会传送标签到远程仓库服务器上. 在创建完标签后,你必须显式地(手动)推送标签到远程服务器上. 需要将标签推送到远程版本库作为一个发行版本,可以通过以下两种方式: 推送本地的指定标签 这个过程就像共享远程分支一样,你可以执行命令: git push origin <ta

  • Git基础学习之文件删除操作命令详解

    目录 1.删除文件说明 2.删除文件操作 (1)仅删除暂存区的文件 (2)完全删除文件 3.本文用到的命令总结 1.删除文件说明 在Git工作目录中要删除某个文件,首先要清楚该文件所处的状态. 若要是该文件未被Git管理,在工作区直接进行删除即可.(不演示) 但是,若该文件已经经过多次git add与git commit操作后,就必须要从已跟踪文件清单中删除(确切地说,是在暂存区中删除),然后提交. 可以用git rm命令完成此项工作,并连带从工作目录中删除指定的文件,这样文件之后就不会出现在未

  • Java web基础学习之开发环境篇(详解)

    Tomcat + Eclipse添加Java EE插件 因为之前进行Java SE学习已经配置了JDK,安装了Eclipse for Java SE,所以选择了在Eclipse上添加插件的方式来配置Web开发环境 Tomcat是免安装版,直接解压即可: Eclipse中"帮助-安装新软件",work with处选择Mars - http://download.eclipse.org/releases/mars(注意对应自己版本): 选择Web.Java EE那个选项进行安装即可,如果报

  • Go语言基础学习之数组的使用详解

    目录 1. Array(数组) 2. 声明数组 3. 数组初始化 3.1 方式一 3.2 方式二 3.3 方式三 3.4 多维数组 4. 遍历数组&取值 5. 数组拷贝和传参 数组相必大家都很熟悉,各大语言也都有数组的身影.Go 语言也提供了数组类型的数据结构. 1. Array(数组) 数组是同一种数据类型的固定长度的元素集合.在 Go 语言中,数组声明后长度就不能改变了,可以修改数组的元素,用法: // eg: 定义一个长度为 10 的 int 数组 var a [10]int 2. 声明数

  • Python学习之字符串常用操作详解

    目录 1.查找字符串 2.分割字符串 3.连接字符串 4.替换字符串 5.移除字符串的首尾字符 6.转换字符串的大小写 7.检测字符串(后续还会更新) 1.查找字符串 除了使用index()方法在字符串中查找指定元素,还可以使用find()方法在一个较长的字符串中查找子串.如果找到子串,返回子串所在位置的最左端索引,否则返回-1. 语法格式: str.find(sub[,start[,end]]) 其中,str表示被查找的字符串.sub表示查找的子串.start表示开始索引,缺省时为0.end表

  • Python基础学习之函数方法实例详解

    本文实例讲述了Python基础学习之函数方法.分享给大家供大家参考,具体如下: 前言 与其他编程语言一样,函数(或者方法)是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. python的函数具有非常高的灵活性,可以在单个函数里面封装和定义另一个函数,使编程逻辑更具模块化. 一.Python的函数方法定义 函数方法定义的简单规则: 1. 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(). 2. 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数. 3.

  • Java基础学习之反射机制原理详解

    目录 一.什么是反射 二.反射的原理 三.反射的优缺点 四.反射的用途 五.反射机制常用的类 六.反射的基本使用 一.什么是反射 (1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法.本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息. (2)Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM.通过反射,可

  • Git基础学习之分支操作的示例详解

    目录 1.新建一个分支并且使分支指向指定的提交对象 2.思考 3.项目分叉历史的形成 4.分支的总结 1.新建一个分支并且使分支指向指定的提交对象 使用命令:git branch branchname commitHash. 我们现在本地库中只有一个 master 分支,并且在 master 分支有三个提交历史. 需求:创建一个 testing 分支,并且testing 分支指向 master 分支第二个版本. # 1.查看提交历史记录 L@DESKTOP-T2AI2SU MINGW64 /j/

  • Git基础学习之分支基本操作详解

    目录 1.创建分支 (1)创建分支 (2)图示理解 2.查看分支列表 3.分支切换 4.查看所有分支的最后一个提交 5.删除分支 1.创建分支 (1)创建分支 Git 是怎么创建新分支的呢? 很简单,就是要创建一个可以移动的新的指针. 比如,创建一个testing分支, 你需要使用命令:git branch testing. 示例: # 1.查看本地版本库历史提交 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ gi

  • MySQL数据库基础学习之JSON函数各类操作详解

    目录 前言 一.JSON语法规则 二.JSON函数 1.JSON_CONTAINS(json_doc,value)函数 2.JSON_SEARCH()函数 3.JSON_PRETTY(json_doc)函数 4.JSON_DEPTH(json_doc)函数 5.JSON_LENGTH(json_doc[,path])函数 6.JSON_KEYS(json_doc[,path])函数 7. JSON_INSERT(json_doc,path,val[,path,val] ...)函数 8.JSON

随机推荐