[Git] 标签管理

文章目录

这是 Git 入门系列的最后一篇文章,恭喜~

我们来学习 Git 的最后一个基础概念:标签管理。标签(Tag)是 Git 中用来标记历史上某个重要时间点(也就是某个 Commit)的一个方式。


想象一下你的项目历史是一条时间线上的连续提交。在某些关键的时刻,比如发布一个正式版本(v1.0, v2.0),或者完成了一个重要的开发阶段,你希望给当前的 Commit 打一个永久的、有意义的标记 ,以便将来能够轻松地找到这个特定的版本。这个标记就是标签(Tag)

  • 标签是一个指向某个 Commit 的固定指针。 和分支不同,分支(比如 masterdev)会随着新的提交不断向前移动,而标签一旦创建,它就永远指向你创建它时所关联的那个 Commit,不会再移动
  • 标签给 Commit 起别名。 Commit ID 是一长串难记的字符,而标签通常是像 v1.0release-20231231 这样容易理解和记忆的名字。这使得回退到某个重要版本或者查看某个特定版本的代码变得非常方便,你只需要记住标签名,而不需要记住复杂的 Commit ID。

标签的意义,主要体现在给项目的重要发布版本关键节点做标记。

创建标签:给重要时刻打上印记

在 Git 中创建标签非常简单。标签总是打在某个 Commit 上。

命令: git tag [标签名称]

默认行为: 如果你只输入 git tag [标签名称] 而不指定 Commit ID,Git 会默认给 HEAD** 指向的那个 Commit**(也就是当前分支的最新提交)打标签。

  1. 切换到你想要打标签的分支: 通常是 mastermain 分支,并且确保它在最新的状态。
bash 复制代码
zz@139-159-150-152:~/git_teaching$ git branch
* master # 确保在 master 分支

假设当前 master 分支的最新提交是我们添加 .gitignore 的那个提交 (97811ab...)。

  1. 为最新提交打标签 v1.0
bash 复制代码
zz@139-159-150-152:~/git_teaching$ git tag v1.0
  1. 查看所有本地标签: 使用 git tag 命令(不带参数)。
bash 复制代码
zz@139-159-150-152:~/git_teaching$ git tag
v1.0 # 显示我们刚刚创建的标签

Git 会按字母顺序显示标签。

在指定历史 Commit 上打标签:

有时候你可能需要给过去某个特定的 Commit 打标签,而不是最新提交。你需要先找到那个 Commit 的 ID。

  1. 找到目标 Commit 的 ID: 使用 git log 命令查看历史提交,找到你想要打标签的那个 Commit 的 ID。
bash 复制代码
zz@139-159-150-152:~/git_teaching$ git log --pretty=oneline --abbrev-commit
97811ab (HEAD -> master, tag: v1.0, origin/master, origin/HEAD) Add .gitignore # 这是最新提交,已经有 v1.0 标签了
60e6b0a update README.md. # 上一个提交
7ce3183 create file.txt   # 再上一个提交
c6ce3f0 Initial commit    # 最早的提交,假设我们想给它打 v0.9 的标签

我们找到了最早的提交 ID 是 c6ce3f0

  1. 为指定 Commit 打标签 v0.9
bash 复制代码
zz@139-159-150-152:~/git_teaching$ git tag v0.9 c6ce3f0

命令格式是 git tag [标签名称] [Commit ID]

  1. 再次查看所有本地标签:
bash 复制代码
zz@139-159-150-152:~/git_teaching$ git tag
v0.9 # 新增的标签 v0.9
v1.0 # 已有的标签 v1.0

标签列表按字母顺序显示。

查看标签指向的 Commit 信息: git show [标签名称]

你可以使用 git show [标签名称] 命令来查看标签指向的 Commit 的详细信息,包括 Commit 的作者、日期、消息以及改动内容等。

bash 复制代码
zz@139-159-150-152:~/git_teaching$ git show v1.0
commit 97811abd1d43774aeb54fee32bf4fc76b2b08170 (HEAD -> master, tag: v1.0, origin/master, origin/HEAD) # 显示 Commit ID 和相关的引用 (分支、标签)
Author: zz91 <[email protected]> # 作者
Date:   Fri May 12 17:27:06 2023 +0800 # 日期
    Add .gitignore # Commit 消息

diff --git a/.gitignore b/.gitignore # 以下是 Commit 的改动内容(diff)
... # 省略 diff 详情

这清楚地显示了 v1.0 标签指向了 97811ab... 这个 Commit。

创建带有说明的标签 (Annotated Tags): git tag -a

我们上面创建的标签是轻量级标签(Lightweight Tag) ,它只是一个指向 Commit 的指针。Git 还支持创建带有说明的标签(Annotated Tag)。带有说明的标签是 Git 数据库中的一个完整对象,它包含了打标签的人的信息、日期,以及一个标签的说明信息。通常推荐在发布版本时使用带有说明的标签。

命令: git tag -a [标签名称] -m "标签说明信息" [Commit ID]

  • -a [标签名称]:指定要创建的标签名。
  • -m "标签说明信息":为标签添加说明信息。
  • [Commit ID]:可选,指定为哪个 Commit 打标签。如果省略,默认为当前 HEAD 指向的最新 Commit。
bash 复制代码
# 为当前最新提交打一个带说明的标签 v1.1
zz@139-159-150-152:~/git_teaching$ git tag -a v1.1 -m "Release version 1.1"

使用 git show v1.1 命令查看带有说明的标签时,你会看到标签本身的额外信息(打标签者、日期、说明信息),然后才是它指向的 Commit 信息。

标签在哪里?

标签和分支一样,也是以文件的形式存储在 .git 目录下。分支存储在 .git/refs/heads/,而标签存储在 .git/refs/tags/。可以进入这个目录看看。

bash 复制代码
Administrator@WIN-M4LJSH3B2EV MINGW64 /d/Code/Data-Visualization (main)
$ git tag Test

操作标签:删除和推送

标签创建后,你可能需要删除或者推送到远程仓库。

删除本地标签: git tag -d

如果你打错了标签,或者某个标签不再需要,可以轻松地删除本地标签。

命令: git tag -d [要删除的标签名称]

bash 复制代码
# 查看当前本地标签
zz@139-159-150-152:~/git_teaching$ git tag
v0.9
v1.0
# 删除本地标签 v0.9
zz@139-159-150-152:~/git_teaching$ git tag -d v0.9
Deleted tag 'v0.9' (was c6ce3f0) # Git 提示删除了哪个标签及其指向的 Commit
# 再次查看本地标签
zz@139-159-150-152:~/git_teaching$ git tag
v1.0 # v0.9 标签已被删除

因为标签默认只存储在本地,删除本地标签是安全的,不会影响其他人的仓库。

推送标签到远程仓库: git push origin <tagname>** 或 **git push origin --tags

和分支不同,Git 的标签默认是不会自动推送到远程仓库 的。这意味着你在本地打了标签 v1.0,你的远程仓库和你的协作者的本地仓库里都没有这个标签。要让大家都能看到并使用这个标签,你需要显式地将它推送到远程。

  • 推送某个特定的标签:
    命令: git push <远程主机名> <标签名称>
bash 复制代码
# 确保本地有 v1.0 标签
zz@139-159-150-152:~/git_teaching$ git tag
v1.0

# 推送 v1.0 标签到 origin 远程仓库
zz@139-159-150-152:~/git_teaching$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:zz91/git_teaching.git
 * [new tag] v1.0 -> v1.0 # 提示:推送了一个新的标签 v1.0

此时在 Gitee 仓库页面查看标签列表,应该能看到 v1.0 标签了。

  • 一次性推送所有本地标签: 如果你在本地打了多个新标签,想一次性推送到远程,可以使用 --tags 参数。
    命令: git push origin --tags
    这个命令会将所有本地存在但远程没有的标签推送到远程仓库。你可以自己尝试一下。

删除远程标签:先本地删除,再推送到远程"删除"

如果一个标签已经被推送到远程仓库,并且你想从远程仓库中删除它,需要先删除本地标签,然后再执行一个特殊的 push 命令来告诉远程仓库也删除这个标签。

  1. 删除本地标签:
bash 复制代码
# 确保 v1.0 已推送到远程
zz@139-159-150-152:~/git_teaching$ git tag
v1.0

# 删除本地的 v1.0 标签
zz@139-159-150-152:~/git_teaching$ git tag -d v1.0
Deleted tag 'v1.0' (was 97811ab)
  1. 执行特殊的 push 命令删除远程标签: 这个命令的格式比较特别,表示"推送一个空的内容到远程的这个标签引用",从而实现删除。
    命令: git push <远程主机名> :refs/tags/<要删除的标签名称>
    注意冒号前面的空是必须的。
bash 复制代码
# 删除远程 origin 仓库上的 v1.0 标签
zz@139-159-150-152:~/git_teaching$ git push origin :refs/tags/v1.0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:zz91/git_teaching.git
 - [deleted] v1.0 # 提示:远程的 v1.0 标签已被删除

此时在 Gitee 仓库页面查看标签列表,应该看不到 v1.0 标签了。

总结标签管理

  • 标签(Tag) 是指向某个特定 Commit 的固定指针,用于标记项目历史中的重要节点。
  • git tag [名称]:为最新提交打标签。
  • git tag [名称] [commit-id]:为指定提交打标签。
  • git tag -a [名称] -m "说明":打带有说明的标签。
  • git tag:列出所有本地标签(按字母排序)。
  • git show [标签名称]:查看标签信息和它指向的 Commit 详情。
  • git tag -d [名称]:删除本地标签。
  • git push origin <标签名称>:推送特定本地标签到远程。
  • git push origin --tags:推送所有本地标签到远程。
  • git push origin :refs/tags/[标签名称]:删除远程标签。

标签是版本发布和里程碑标记的重要工具。熟练使用标签,可以让你的项目历史更加清晰和易于管理。


到此为止,我们已经学习了 Git 的大部分核心概念和常用操作。从入门安装到本地仓库管理,从分支和合并到远程协作,再到忽略文件和标签管理,你已经具备了使用 Git 进行日常开发的扎实基础。 Git 的世界广阔而精彩,不断实践和学习,你将能够驾驭这个强大的工具,让你的开发工作更加高效和顺畅!

恭喜你完成了 Git 入门的学习!


Git 是一个功能强大的工具,它的魅力在于其灵活性和效率。这些只是 Git 世界的冰山一角,但它们是理解和使用 Git 进行高效版本控制和团队协作的基石。

最重要的学习方法是: 多实践! 在你自己的小项目里,或者找一个开源项目尝试克隆,亲手去执行这些命令,观察它们的输出和对文件状态的影响。遇到问题,回顾这些知识点,或者搜索查阅更详细的文档。

希望这系列 Git 入门系列博客能帮助到你!

相关推荐
Mikhail_G12 分钟前
数据分析入门初解
大数据·运维·开发语言·python·数据分析
希艾席帝恩23 分钟前
从传统楼盘到智慧空间:数字孪生的地产赋能之路
大数据·运维·服务器·人工智能·数字孪生·云渲染
阿里云大数据AI技术1 小时前
DistilQwen-ThoughtX蒸馏模型在PAI-ModelGallery的训练、评测、压缩及部署实践
大数据·开源·llm
VR最前沿2 小时前
Xsens动捕和Manus数据手套在元宇宙数字人制作中提供解决方案
大数据·人工智能·科技·机器人·自动化
百胜软件@百胜软件3 小时前
销售预测的方法与模型(二)丨商品与库存分类——基于数据模型运营的本质和底层逻辑销售
大数据·人工智能·销售预测
Detachym3 小时前
CentOS7下MySQL8.0的安装到基本操作
大数据·mysql·linux学习·学习日志
拓端研究室4 小时前
专题:2025年跨境B2B采购买家行为分析及采购渠道研究报告|附160+份报告PDF汇总下载
大数据
一ge科研小菜鸡4 小时前
云原生时代的系统设计:架构转型的战略支点
大数据·人工智能
Lalolander5 小时前
金属工具制造企业如何做项目管理?数字化系统全面提升交付效率
大数据·制造·工程项目管理·四算一控·epc·工程企业业财一体化·金属工具制造项目管理
武子康5 小时前
大数据-11-MapReduce JOIN 操作的Java实现 Driver Mapper Reducer具体实现逻辑 模拟SQL进行联表操作
大数据·后端