Git系列之git tag

这篇具有很好参考价值的文章主要介绍了Git系列之git tag。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

Git可给仓库历史中的某一个提交打上标签,常用于标记发布结点。

本文使用的Git版本为:

$ git --version
git version 2.23.0.windows.1

实战

列出标签

列出全部标签的命令为:git taggit tag -lgit tag -list,即-l-list选项是可选的,git tag,即默认列出全部标签,以字母顺序排序。

查找某些特定标签的命令:git tag -l "release*",查找特定标签时,-l-list选项必须要带上。

查看标签

使用git show命令可输出标签信息和与之对应的提交信息。根据标签的不同类型,其打印输出的信息不一致,参考下面章节。

创建标签

Git支持两种标签:

  • 轻量标签:lightweight,像一个不会改变的分支——它只是某个特定提交的引用。
  • 附注标签:annotated,是存储在Git数据库中的一个完整对象,可以被校验,其中包含打标签者的名字、电子邮件地址、日期时间、标签信息,并且可使用 GNU Privacy Guard (GPG)签名并验证。

通常会建议创建附注标签,这样你可以拥有以上所有信息。但是如果你只是想用一个临时标签,或因某些原因不想要保存这些信息,则使用轻量标签。

轻量标签

轻量标签,本质上是将提交校验和存储到一个文件中——没有保存任何其他信息。命令:git tag <tag_name>,即基于当前分支的最后一次提交记录打一个标签轻量。

对轻量标签执行git show命令,输出如下:

$ git tag my-tag
$ git show my-tag
commit f937f5d2d1ad11b0f6c8655f7d4380bbabc4799d (HEAD -> release_20221208_V1.4, tag: my-tag, origin/release_20221208_V1.4)
Author: johnny <johnny@aaaa.com>
Date:   Tue Dec 13 11:05:49 2022 +0800

    WTF???

diff --git a/cloud-autojob/src/test/java/com/xy/cloud/autojob/business/xxljob/AutoJobWarnHandlerTest.java b/cloud-autojob/src/test/java/com/xy/cloud/autojob/business/xxljob/AutoJobWarnHandlerTest.java

不打印额外的标签信息,打印出提交信息,和git diff信息。

附注标签

命令git tag -a <tag_name> -m "test annotated tag"创建附注标签,-a选项指定是附注标签,-m选项指定一条将会存储在标签中的信息。类似于git commit时必填的commit信息。如果没有指定-m选项,Git会启动vi编辑器要求你输入信息。

对附注标签执行git show命令,输出如下:

$ git show tag_master_release_20221011_fix_qiwei
tag tag_master_release_20221011_fix_qiwei
Tagger: scm <scm@ai.com>
Date:   Mon Oct 17 15:14:45 2022 +0800

qiwei
commit 23e88c880860f98767d80571f9b49b8c53a9cc0d (tag: tag_master_release_20221011_fix_qiwei)
Merge: b2fe24a8 1e33e55e
Author: scm <scm@ai.com>
Date:   Mon Oct 17 15:14:42 2022 +0800

    Merge branch 'release_20221011_fix_qiwei' into 'master'

    qiwei

    See merge request !72

输出打标签者的信息、打标签的日期时间、附注信息、具体的提交信息。

后期打标签

还可以对过去的提交打标签,即基于某个commit打标签:
$ git tag -a test-commit-tag f367a00 -m "test commit tag"

推送标签

git push命令默认并不会push标签到远程仓库服务器上。在创建完标签后必须显式地推送标签到服务器上。和git push origin <branch>类似。使用命令git push origin <tagname>推送,如果想把本地的多个标签推送到服务器,则可使用--tags选项指定哪些标签。

删除标签

删除本地仓库上的标签,使用命令git tag -d <tagname>,不会删除远程服务器上面的相应标签。删除远程标签有2种方式:

  1. git push <remote> :refs/tags/<tagname><remote>一般就是origin,当然支持重命名。即使用命令:git push origin :refs/tags/test-commit-tag,将冒号前面的空值推送到远程标签名,从而高效地删除它;
  2. git push origin --delete <tagname>,直观易懂。

检出标签

使用git checkout命令,查看某个标签所指向的文件版本,这个命令会使本地仓库处于detached HEAD状态。在此状态下,如果你做了某些更改然后提交它们,标签不会发生变化,但你的新提交将不属于任何分支,并且将无法访问,除非通过确切的提交哈希才能访问。 因此,如果你需要进行更改,比如你要修复旧版本中的错误,那么通常需要创建一个新分支:

git checkout -b fix_qiwei_again tag_master_release_20221011_fix_qiwei
Switched to a new branch 'fix_qiwei_again'

如果在这之后又进行一次提交,fix_qiwei_again分支就会因为这个改动向前移动,此时它就会和tag_master_release_20221011_fix_qiwei标签产生差别。

CI Tags

基于GitLab的CI机制,每次发布都需要打一个Tag。日积月累,会发现一个Git Repository动辄几百个Tag。
Git系列之git tag
Tag数量巨多,并不影响git clone/push/pull命令的执行;绝大多数公司都使用私有部署的GitLab,命令执行速度都挺快。实际上,影响这几个操作的速度在于git repo里面是否有大文件。

不过:

  1. 一年,甚至两三年前的Tag用处不大
  2. 打开GitLab,页面显得不清爽
  3. Rancher/Jenkins发布时,备选项太多,不易过滤

如何删除历史Tag?

查询所有Tag:git tag -l

过滤指定字母开头的Tag:git tag -l | grep stggit tag -l "stg2020*"

删除远程Tag:git push -d origin $(git tag -l "stg2020*")

Tag和Commit关系

接触过Rancher的朋友们,应该知道Rancher基于Git Hook + Jenkins可以实现自动构建。

借助于KubernetesFileBrowser,可在线浏览kubernetes pod里的文件,并且可以下载Jar包。使用JD-GUI反编译Jar包,即可知道某个Tag对应的镜像image版本里的Jar包内容。

经过验证:文章来源地址https://www.toymoban.com/news/detail-511971.html

  • 本地修改过的文件,没有执行命令git commit,此时执行命令git tag -a stg1 -m "test",本地修改不会进入Git Tag。
  • 本地修改,执行过git commit,但没执行git push到remote Server,会进入到Git Tag。

参考

  • git-book
  • delete-multiple-git-remote-tags-and-push-once
  • 如何看待CI产生的大量Tag?
  • https://stackoverflow.com/questions/10612742/will-too-many-tags-cause-any-issues-in-git
  • https://softwareengineering.stackexchange.com/questions/357199/is-it-bad-practice-to-create-a-git-tag-for-every-successful-continous-deployed-b

到了这里,关于Git系列之git tag的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • git删除历史提交中的某些文件

    要从所有提交中删除PDF文件并保留本地文件,你需要使用 git filter-repo 命令或 git filter-branch 命令来重写历史。请注意,这将修改提交历史,因此需要小心操作,确保在执行之前备份数据。 以下是使用 git filter-repo 命令的示例,假设要删除所有PDF文件: 如果你要删除多个文件,

    2024年02月14日
    浏览(39)
  • Git | 如何在保留历史记录的情况下,把代码从一个仓库搬运到另一个仓库?

    算是一篇踩坑记录,或者一篇爬坑教程吧 (之所以称之为坑,是因为大多数情况下,直接复制代码就完事了 现有两个Git仓库,A和B,A是项目的主要仓库,为了方便管理,现在要把A中功能较为独立的一块代码搬运到B,同时,希望能够保留这部分代码的历史记录。 先不考虑其

    2024年02月11日
    浏览(28)
  • Git从一个仓库合并另一个仓库的某一次提交

    在Git中,要将另一个仓库的某一次提交合并到当前仓库,可以使用 git cherry-pick 命令。这个命令用于将指定的提交应用到当前分支上。以下是详细步骤: 请确保在执行这些操作之前备份您的代码,以防发生意外。 添加远程仓库作为远程引用(如果还没有添加) : remote-name 是

    2024年01月19日
    浏览(38)
  • git命令使用 将git仓库克隆到另一个仓库,并保留原来的提交记录

    君子拙于不知己,而信于知己。——司马迁   清屏:clear 查看当前面板的路径:pwd 查看当前面板的文件:ls 创建文件夹:mkdir 文件夹名 创建文件:touch 文件名 删除文件夹:rm -rf 文件夹名 删除文件:rm -f 文件名 移动文件/文件夹:mv 需移动文件/文件名 目标文件夹/(../上级)  

    2024年02月12日
    浏览(37)
  • 【笔记】Git|将git仓库中所有的 commit 合成一个,清空所有 git 提交记录

    在对代码进行开源时,我们往往并不希望代码开发过程中的提交记录被其他人看到,因为提交的过程中往往会涵盖一些敏感信息。因此会存在 将仓库中所有 commit 合成一个 的需求。 直觉上,往往会用 rebase 和 squash 或 reset,不过我尝试了一下存在问题,会出现最后仍然剩两个

    2024年02月11日
    浏览(31)
  • BFG Repo-Cleaner 清理在Git历史记录中不需要的数据(git仓库臃肿、git仓库太大、清理git仓库大文件、清理.git\objects\pack中的.pack文件)

    在处理 Git 项目时,可能会遇到一些敏感信息或者大文件被误上传到了仓库,这样会导致仓库变得庞大并且难以管理。这种情况下,BFG Repo-Cleaner 就派上用场了。它是一个更简单、更快速的工具,可以帮助我们从 Git 历史记录中删除不需要的数据。 BFG Repo-Cleaner 是一个由 Scala

    2024年02月02日
    浏览(39)
  • IntelliJ IDEA - 一篇解决如何多模块项目提交到同一个 Git 仓库

    事情是这样的,最近新建了一个项目(多模块),这个不必多说大家就知道长什么样子(文件结构),问题是在我写完后想提交项目到 Git 仓库时,发现每个模块都要设置 Remote Git 地址,那么相当于是把每一个模块独立一个 Git 仓库地址,这个是我这个项目中不希望出现的(当

    2024年02月15日
    浏览(51)
  • Git 如何将一个项目的代码放到一个新的仓库中,但不在新的仓库中显示旧的提交记录

    场景:我想把RuoYi的代码放到一个新的仓库里,放进去之后,这个仓库会显示RuoYi之前的所有提交,如何不显示这些旧的提交? 有时候,我们可能需要将一个项目的代码放到一个新的仓库中,但是我们又不想在新的仓库中显示旧的提交记录。这可能是因为旧的提交记录包含一

    2024年02月07日
    浏览(41)
  • git操作修改历史版本指定tag标签的代码,并发布新标签

    当项目已经迭代多个版本之后,突然发现旧版本0.0.1出现了紧急bug,需要及时处理; 如果直接用新版本替换上去是存在极大隐患的,且时间来不及; 所以需要直接在0.0.1版本的基础上去修复bug,然后发布一个新版本去更新,这样才会更加稳妥,影响范围也会最小; 列出所有标

    2024年02月09日
    浏览(58)
  • Git - 查看 commit 提交历史

    查看提交历史 在提交了若干更新,又或者克隆了某个项目之后,如何查看提交历史 官方栗子 运行下面的命令获取该项目: 运行 git log 命令 可以获取到的信息 不传入任何参数的默认情况下, git log 会按 时间先后顺序 列出所有的提交,最近的更新排在最上面 会列出每个提交

    2024年02月06日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包