前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【Git】四、标签管理

【Git】四、标签管理

作者头像
利刃大大
发布2025-02-20 07:44:09
发布2025-02-20 07:44:09
11800
代码可运行
举报
文章被收录于专栏:csdn文章搬运
运行总次数:0
代码可运行

Ⅰ. 理解标签

​ 标签 tag ,可以简单的理解为是 对某次 commit 的一个标识,相当于起了一个别名。例如,在项目发布某个版本的时候,针对最后一次 commit 起一个 v1.0 这样的标签来标识里程碑的意义。

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

​ 所以,标签是版本库的一个快照

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

Gitcommit,为什么还要引入 tag? ​ “请把上周一的那个版本打包发布,commit 号是 6a5819e…” ​ “一串乱七八糟的数字不好找!” ​ 如果换一个办法: ​ “请把上周一的那个版本打包发布,版本号是 v1.2” ​ “好的,按照 tag v1.2 查找 commit 就行!” ​ 所以,tag 就是一个让人容易记住的有意义的名字,它跟某个 commit 绑在一起

Ⅱ. 创建标签

Git 使用的标签有两种类型: 轻量级的(lightweight含附注的(annotated

​ 轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的 引用

​ 而含附注标签,实际上是存储在仓库中的一个 独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用 GNU Privacy Guard (GPG) 来签署或验证。

一般我们都建议使用含附注型的标签,以便保留相关信息;当然,如果只是临时性加注标签,或者不需要旁注额外信息,用轻量级标签也没问题。

① 轻量级标签

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

代码语言:javascript
代码运行次数:0
复制
[liren@VM-8-7-centos remote-test]$ git branch 
* master

​ 然后,敲命令 git tag [name] 就可以打一个新标签:

代码语言:javascript
代码运行次数:0
复制
[liren@VM-8-7-centos remote-test]$ git tag v1.0

​ 并且可以使用命令 git tag 查看所有标签:

代码语言:javascript
代码运行次数:0
复制
[liren@VM-8-7-centos remote-test]$ git tag
v1.0

​ 默认标签是打在最新提交的 commit 上的。那如何在指定的 commit 上打标签呢❓❓❓

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

代码语言:javascript
代码运行次数:0
复制
[liren@VM-8-7-centos remote-test]$ git log --pretty=oneline --abbrev-commit 
f167d57 update file.txt.
221511a add file.txt
e7f4971 Initial commit
[liren@VM-8-7-centos remote-test]$ git tag v0.9 f167d57
[liren@VM-8-7-centos remote-test]$ git tag
v0.9
v1.0

​ 注意,标签是按字母排序的,而不是按时间顺序列出的。

​ 我们可以用 git show [tagname] 查看标签信息。

代码语言:javascript
代码运行次数:0
复制
[liren@VM-8-7-centos remote-test]$ git show v1.0
commit f167d579b2f9d07aa8b2b467192e667b98f9353c
Author: 利刃大大 <2916776007@qq.com>
Date:   Thu Jul 13 09:56:12 2023 +0000

    update file.txt.
    
    Signed-off-by: 利刃大大 <2916776007@qq.com>

diff --git a/file.txt b/file.txt
index 8d0e412..94a1c74 100644
--- a/file.txt
+++ b/file.txt
@@ -1 +1,2 @@
 hello git
+add new line;
\ No newline at end of file
② 含附注类标签

Git 还提供可以创建带有说明的标签,用 -a 选项 指定标签名-m 指定说明文字,格式为:

代码语言:javascript
代码运行次数:0
复制
git tag -a [name] -m "XXX" [commit_id]

​ 另外,打完标签之后,使用 tree .git 命令查看一下本地库,可以看到 tags 其实就在 .git/refs/ 目录下:

代码语言:javascript
代码运行次数:0
复制
……
|-- ORIG_HEAD
|-- packed-refs
`-- refs
    |-- heads
    |   `-- master
    |-- remotes
    |   `-- origin
    |       |-- HEAD
    |       `-- master
    `-- tags                  #如果打印出来其实就是对应的commit id
        |-- v0.9
        `-- v1.0

Ⅲ. 操作标签

​ 如果标签打错了,可以使用 -d 选项来进行删除:

代码语言:javascript
代码运行次数:0
复制
[liren@VM-8-7-centos remote-test]$ git tag
v0.9
v1.0
[liren@VM-8-7-centos remote-test]$ git tag -d v0.9  # 删除v0.9标签
Deleted tag 'v0.9' (was f167d57)
[liren@VM-8-7-centos remote-test]$ git tag
v1.0

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

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

代码语言:javascript
代码运行次数:0
复制
[liren@VM-8-7-centos remote-test]$ git tag
v1.0
[liren@VM-8-7-centos remote-test]$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To git@gitee.com:lirendada/remote-test.git
 * [new tag]         v1.0 -> v1.0

​ 此时,查看远端码云,看到了标签已经被更新!

在这里插入图片描述
在这里插入图片描述

​ 当然,如果你本地有很多标签,也可以一次性的全部推送到远端:

代码语言:javascript
代码运行次数:0
复制
git push origin --tags

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

代码语言:javascript
代码运行次数:0
复制
[liren@VM-8-7-centos remote-test]$ git tag
v1.0
[liren@VM-8-7-centos remote-test]$ git tag -d v1.0
Deleted tag 'v1.0' (was f167d57)

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

代码语言:javascript
代码运行次数:0
复制
[liren@VM-8-7-centos remote-test]$ git push origin :refs/tags/v1.0
remote: Powered by GITEE.COM [GNK-6.4]
To git@gitee.com:lirendada/remote-test.git
 - [deleted]         v1.0

​ 在码云上查看确实删除成功!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Ⅰ. 理解标签
  • Ⅱ. 创建标签
    • ① 轻量级标签
    • ② 含附注类标签
  • Ⅲ. 操作标签
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档