当前位置: 首页 > news >正文

[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 分支,并且确保它在最新的状态。
zz@139-159-150-152:~/git_teaching$ git branch
* master # 确保在 master 分支

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

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

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

在指定历史 Commit 上打标签:

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

  1. 找到目标 Commit 的 ID: 使用 git log 命令查看历史提交,找到你想要打标签的那个 Commit 的 ID。
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
zz@139-159-150-152:~/git_teaching$ git tag v0.9 c6ce3f0

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

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

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

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

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

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 <2689241679@qq.com> # 作者
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。
# 为当前最新提交打一个带说明的标签 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/。可以进入这个目录看看。

Administrator@WIN-M4LJSH3B2EV MINGW64 /d/Code/Data-Visualization (main)
$ git tag Test

操作标签:删除和推送

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

删除本地标签:git tag -d

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

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

# 查看当前本地标签
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 <远程主机名> <标签名称>
# 确保本地有 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. 删除本地标签:
# 确保 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/<要删除的标签名称>
    注意冒号前面的空是必须的。
# 删除远程 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 入门系列博客能帮助到你!

相关文章:

  • 三.Gitee远程操作标签操作
  • FastAPI基础入门(三)
  • 智慧医疗能源事业线深度画像分析(下)
  • MySQL 基础笔记
  • Reactive-Resume:重构你的简历编写体验
  • 【系统设计【1】】系统设计面试方法论:从0到百万用户的需求到架构的推演
  • 分布式I/O在食品包装行业中的应用
  • 【 WWDC25:新系统,新命名】
  • < 买了个麻烦 (二) 618 京东云--轻量服务器 > 可以为您申请全额退订呢。 挣取来的,东京云 轻量服务器,可以“全额退款“
  • 【Linux】进程控制(下)---程序替换宝藏岛
  • 前端~三维地图(cesium)点位聚合
  • 黑马教程强化day2-1
  • 七牛云图片上传 前后端全过程
  • vue封装的echarts组件被同一个页面多次引用只显示一个的问题
  • Uncaught (in promise) TypeError: Cannot read properties of null (reading ‘xxx’)
  • Win10重装系统 (重生篇:我在华强修电脑)
  • AIGC方案-java实现视频伪动效果
  • SpringBoot + 自建GitLab + Jenkins + CentOS Stream 9 来实现自动化部署
  • 御微半导体面试总结
  • 内存泄漏系列专题分析之二十:camx swap内存泄漏实例分析
  • 做网站搭建的公司/网络营销的目的是什么
  • wordpress验证邮箱验证/网站seo 优化
  • 滕州做网站比较好的网络公司/域名网站
  • 保险网站哪个好/今日最新财经新闻
  • b2b代表网站/网站发稿平台
  • gta5可用手机网站大全/常用的seo查询工具有哪些