baby sword‘s blog baby sword‘s blog
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)

zhengjian

不敢承担失去的风险,是不可能抓住梦想的
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)
  • 华仔聊技术

  • 业务设计

  • 场景设计

  • 运维

  • 安全

  • 面试

  • mac相关工具推荐

  • 开发工具

    • git安装后怎么做
    • git介绍
    • git常用命令
    • git三剑客
    • git标签详解
      • 标签的本质
      • 标签的分类
      • 标签何时使用
      • 标签相关命令
        • 创建一个标签
        • 显示标签
      • 显示标签内容
      • 查找标签
      • 标签推送到远程
      • 删除标签
        • 删除远程标签
        • 删除本地标签
      • 标签的切换
      • 拉取标签
    • merge的方式
    • 记一次git rebase操作
    • 持续集成、持续交付、持续部署
    • 开机自启脚本方法
    • shell语法
    • 解决mac安装软件后显示已经被损坏
    • 不同序列化工具性能测试
    • JMH测试工具介绍
  • 人工智能

  • 推荐

  • 阅读

  • 工具

  • 计划

  • 产品

  • 云原生

  • go

  • QVM

  • 软件设计师

  • 极客时间

  • 单元测试

  • 其他
  • 开发工具
xugaoyi
2023-06-09
目录

git标签详解

# 标签的本质

标签的本质是一次commit,其指向了一个commit对象。它们的值都为各自指向提交的SHA1值;但是,不同于会随着提交的变化而变化的分支,一旦给某次提交添加了标签,该标签就永远不会发生变化。

标签是一次提交,本次提交可以指向任何分支上的一次提交,且标签定下后,不会再进行改变。

# 标签的分类

  • 轻量级标签(lightweight):不可添加注释;
  • 带有附注的标签(annotated):可以添加注释;

Annotated tags are meant for release while lightweight tags are meant for private or temporary object labels.

以上是git官方文档对两种标签的说明,大意是:带注释的标签用于发布,而轻量级标签则用于私人或临时对象。

# 标签何时使用

  • 版本发布:一般master分支都会作为项目的发布分支,当项目开发到了一个成熟的阶段,准备在master分支进行发布时。一般都会在master分支的当前提交上打上一个类似"v1.2"的标签;
  • 版本管理:可以通过标签的形式记录项目某一阶段的状态。

image-20230412201509398

# 标签相关命令

# 创建一个标签

  • 轻量级标签

git tag 标签名

我们看看一个轻量级的标签的内容:

image-20230412204829331

这里很容易看出来,轻量级的tag内容就是commit。这说明什么

说明:轻量级标签就是代指了一个commit的指针!!它本身就是一个commit

  • 带附注的标签

git tag -a 标签名 -m "注释"

创建好的标签文件存放在.git/refs/tags中

其实在git中tag也是一个对象,和commit、tree、blob一样

image-20230412204232458

我们看看这个tag的具体信息:

image-20230412204331744

**可以看到标签中有一个内容指向了具体的commit。**且带附注的tag的SAH1和其指向的SAH1不一致

说明带附注的标签更加重量级,他是一个tag对象,不是commit,只是其内部有指向commit的指针

# 显示标签

git tag 或者git tag --list

切换分支后,使用git tag依然可以展示标签,表示标签与tag是没有关系的

# 显示标签内容

git show 标签名

# 查找标签

支持正则表达式

git tag -l <tag_name>

# 标签推送到远程

默认情况git push 是不会推送tag的。

推送特定的tag

git push origin <tag_name>

推送多个tag

git push origin v2.0 v3.0

推送完整指令

git push origin refs/tags/v4.0:refs/tags/v4.0

推送本地全部的tag

git push origin --tag

# 删除标签

# 删除远程标签

当然,我们可以直接在远程仓库上删除远程标签。但是,最好的方式还是采用命令行进行删除。删除远程标签的方法与删除远程分支的方法非常类似,同样有两种方法:

git push origin :<tag_name>

这种方法相当于推送一个空的标签到远程仓库,由此达到删除的效果。比如删除远程仓库中的标签v3.0:

git push origin :v3.0

1
2

image-20200418154504982

这样远程仓库中的标签V3.0就被删除了:

image-20200418154554319

但是本地仓库中对应的标签V3.0并没有被删除:

image-20200418154631370

上述指令为简写,完整写法如下:

git push origin :refs/tags/v3.0

1
2

image-20200418154906969

git push origin --delete <tag_name>

该方法采用了更加语义化的参数--delete,实现远程标签的删除:

git push origin --delete v2.0

1
2

image-20200418155134748

同样成功地删除了远程仓库中的标签v2.0:

image-20200418155216230

但是,本地的标签v2.0也没有被删除:

image-20200418155311429

采用下列的完整写法,效果是一样的:

git push origin --delete tag v2.0

1
2

image-20200418155513090

不难发现,删除远程分支和远程标签的方法是一样的。

# 删除本地标签

git tag -d <tag_name>

如通过以下命令删除标签v3.0:

git tag -d v3.0
1

image-20200418155616562

# 标签的切换

类似于commit的切换,会产生分离头指针

git checkout tag_name

如图所示,在master分支上进行了三次提交,并且添加了相应的标签:

image-20200418161353146

当我们通过checkout命令切换到标签v2.0时:

image-20200418161526176

可见,会出现游离的提交。此时查看各分支状态:

image-20200418161655468

如上图所示,当前处于标签v2.0指向的提交,并且切换标签的过程中改变了HEAD指针的指向。但是,并没有改变分支master的指向。过程如下图所示:

image-20200418162458123

也就是说,切换标签与使用reset进行版本回退十分相似。只不过切换标签只改变了HEAD指针的指向,会造成游离的提交。若有需要可以创建一个新分支进行保存。

# 拉取标签

在下图所示的情况中,本地仓库mygit与远程仓库有公共的提交历史(同源),并且不发生合并冲突的情况下

image-20200418160517111

可以直接通过git pull将远程仓库的标签拉取下来,并创建本地仓库中没有的标签:

image-20200418160737829

编辑 (opens new window)
上次更新: 2024/02/22, 14:03:19
git三剑客
merge的方式

← git三剑客 merge的方式→

最近更新
01
spark基础
02-22
02
mysql读写分离和分库分表
02-22
03
数据库迁移
02-22
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式