Git 基础 - tag 的使用

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

Git 的 tag 功能是一个非常有用的工具,它可以帮助开发者在代码仓库中标记重要的里程碑和版本号。

Tag 可以看作是一个快照,用于永久性地标记提交记录。它们通常用于发布新版本或里程碑,并且可以帮助开发者追踪项目的历史记录。Tag 在 Git 中是轻量级对象,不会像分支那样占用额外的存储空间,因此创建 Tag 对存储的影响很小。

1.创建 tag

Git 支持两种 tag:轻量 tag(lightweight)与附注 tag(annotated)。

轻量 tag 很像一个不会改变的分支——它只是某个特定提交的引用。

而附注 tag 是存储在 Git 数据库中的一个完整对象,它们是可以被校验的,其中包含打 tag 者的名字、电子邮件地址、日期时间,此外还有一个 tag 信息,并且可以使用 GNU Privacy Guard(GPG)签名并验证。 通常会建议创建附注 tag,这样你可以拥有以上所有信息。但是如果你只是想用一个临时的 tag,或者因为某些原因不想要保存这些信息,那么也可以用轻量 tag。

1.1 附注 tag

要创建一个附注 tag,只需要你在执行 tag 命令时指定 -a 选项:

$ git tag -a v1.2.0 -m "version 1.2.0"

-m 选项指定了一条将会存储在 tag 中的信息。如果没有为附注 tag 指定一条信息,Git 会启动编辑器要求你输入信息。

通过使用 git show 命令可以看到 tag 信息和与之对应的提交信息:

$ git show v1.2.0
tag v1.2.0
Tagger: Oliver Zhou <my-email.com>
Date:   Mon May 15 16:47:50 2023 +0800

version 1.2.0

commit 1a3870e3f700e98697d8fd5cc5f9835e5c78ecfc (HEAD -> main, tag: v1.2.0, origin/main)
Author: Oliver Zhou <my-email.com>
Date:   Mon May 15 16:47:01 2023 +0800

    feat:func IsPalindrome

diff --git a/pkg/string.go b/pkg/string.go

输出显示了打 tag 者的信息、打 tag 的日期时间、附注信息,然后显示具体的提交信息。

1.2 轻量 tag

另一种给提交打 tag 的方式是使用轻量 tag。轻量 tag 本质上是将提交校验和存储到一个文件中——没有保存任何其他信息。创建轻量 tag,不需要使用 -a-s-m 选项,只需要提供 tag 名字:

$ git tag v1.3.0

这时,如果在 tag 上运行 git show,你不会看到额外的 tag 信息。命令只会显示出提交信息:

这里相比官方文档提供的例子多出了 diff 后面的一段,可能是版本更新的原因。

$ git show v1.3.0
commit 3c5155f9cd640658bfb1f8ef87d141fa5e6f8332 (HEAD -> main, tag: v1.3.0, origin/main)
Author: Oliver Zhou <my-email.com>
Date:   Mon May 15 17:15:11 2023 +0800

    feat:func FindMax

diff --git a/pkg/slice.go b/pkg/slice.go
new file mode 100644
index 0000000..f94db46
--- /dev/null
+++ b/pkg/slice.go
@@ -0,0 +1,11 @@
+package pkg

1.3 在特定的提交记录打 tag

你也可以对过去的提交打 tag。假设提交历史是这样的:

$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function
4682c3261057305bdd616e23b64b0857d832627b added a todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a started write support
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme

现在,假设在 v1.2 时你忘记给项目打 tag,也就是在 updated rakefile 提交。你可以在之后补上 tag。要在那个提交上打 tag,你需要在命令的末尾指定提交的校验和(或部分校验和):

$ git tag -a v1.2 9fceb02

1.4 将 tag 推送到远程仓库

默认情况下,git push 命令并不会传送 tag 到远程仓库服务器上。在创建完 tag 后你必须显式地推送 tag 到共享服务器上。这个过程就像共享远程分支一样——你可以运行 git push origin <tagname>

$ git push origin v1.3.0

如果要推送所有远端不存在的 tag,可以使用:

$ git push <remote> --tags

注意:使用 git push <remote> --tags 推送 tag 并不会区分轻量 tag 和附注 tag,没有简单的选项能够让你只选择推送一种 tag。

2.查看 tag

2.1 列表

全部查看:

$ git tag

按特定模式进行查找。例如,Git 自身的源代码仓库包含 tag 的数量超过 500 个。如果只对 1.8.5 系列感兴趣,可以运行:

$ git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2
v1.8.5-rc3
v1.8.5.1
v1.8.5.2
v1.8.5.3
v1.8.5.4
v1.8.5.5

注意:

按照通配符列出 tag 需要 -l--list 选项

如果你只想要完整的 tag 列表,那么运行 git tag 就会默认假定你想要一个列表,它会直接给你列出来, 此时的 -l 或 --list 是可选的。

然而,如果你提供了一个匹配 tag 名的通配模式,那么 -l--list 就是强制使用的。

2.2 单个 tag

要查看单个 tag 的信息,可以使用:

$ git show v1.3.0

3.删除 tag

3.1 本地删除

$ git tag -d <tagname>

3.2 远程删除

$ git push origin :refs/tags/<tagname>

上面这种操作的含义是,将冒号前面的空值推送到远程 tag 名,从而高效地删除它。

第二种更直观的删除远程 tag 的方式是:

$ git push origin --delete <tagname>

3.3 删除 tag 所在的分支,会有什么影响?

正如前文所说,tag 的存储和分支的存储是互相独立的,所以删除包含某个 tag 的分支,通常不会导致代码本身出现问题。

但是该 tag 会成为孤儿 tag(orphaned tag),它不再与任何分支关联。这可能会对项目管理和版本控制造成混淆,也可能会影响其他正在用该 tag 进行部署或测试的工作。

4.检出 tag

如果你想查看某个 tag 所指向的文件版本,可以使用 git checkout 命令, 虽然这会使你的仓库处于“分离头指针(detached HEAD)”的状态——这个状态有些不好的副作用:

$  git checkout v1.3.0              
注意:正在切换到 'v1.3.0'。

您正处于分离头指针状态。您可以查看、做试验性的修改及提交,并且您可以在切换
回一个分支时,丢弃在此状态下所做的提交而不对分支造成影响。

如果您想要通过创建分支来保留在此状态下所做的提交,您可以通过在 switch 命令
中添加参数 -c 来实现(现在或稍后)。例如:

  git switch -c <新分支名>

或者撤销此操作:

  git switch -

通过将配置变量 advice.detachedHead 设置为 false 来关闭此建议

HEAD 目前位于 3c5155f feat:func FindMax

在“分离头指针”状态下,如果你做了某些更改然后提交它们,tag 不会发生变化,但你的新提交将不属于任何分支,并且将无法访问,除非通过确切的提交哈希才能访问。因此,如果你需要进行更改,比如你要修复旧版本中的错误,那么通常需要创建一个新分支:

$ git checkout -b version2 v1.3.0
Switched to a new branch 'version2'

如果在这之后又进行了一次提交,version2 分支就会因为这个改动向前移动,此时它就会和 v1.3.0 tag 稍微有些不同,这时就要当心了。

5.参考

官方文档 - 2.6 Git Basics - Tagging文章来源地址https://www.toymoban.com/news/detail-756476.html

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

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

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

相关文章

  • 解决 github 网站 git push 或者 git clone 代码速度太慢

    工作中往往需要从 github 上 clone 别人的代码或者 Push 代码,如果特别慢或者根本连接不上!有个修改 hosts 的方法,不完全保证,可以试试! 1、获取 global.ssl.fastly 地址 访问 http://github.global.ssl.fastly.net.ipaddress.com/#ipinfo,获取 cdn 域名以及 IP Address 2、获取 global.ssl.fastly 地址 访

    2024年02月02日
    浏览(48)
  • Ubuntu创建Git项目并push到远程Github

    首先在本地创建git仓库 对刚刚创建的仓库进行修改 将产生的修改提交到本地 在Github远端创建repository 本地与远端创建SSH连接 敲以下命令,敲三次回车,生成密钥 生成的密钥在用户目录下的.ssh文件夹中: 复制公钥:id_rsa.pub (星号是我自己为了加密弄得嘿嘿) 将公钥复制到

    2024年02月12日
    浏览(30)
  • git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks push -v --tags origin

    好多天没交代码了, 今天用SourceTree提交突然报了这个错误. 上方工具栏, 工具 - 选项 : 进入 验证 标签页, 现在只有这两个: 很明显向github提交应该对第二个进行操作, 点击编辑: 这里需要输入token而不是密码: 然后会新增一个你的github账户存档: 将其设为默认, 然后再次提交代码即

    2024年02月16日
    浏览(26)
  • git push -f强制冲掉了Github的远程仓库怎么恢复?

    看到有很多教程说,可以本地仓库回退到之前的 commit,恢复 GitHub 的 remote 仓库的,但是我遇到的情况是,我本地这个仓库是新建的,只有一次 commit 记录,我是直接 push -f 把 remote 的仓库全冲了。。。本地根本没法恢复。 于是在网上搜索,只找到两篇相关的文章,参考这个老

    2024年02月04日
    浏览(34)
  • git push 到 github 出现 fatal: Authentication failed 的处理方案

    花了不少时间,记录一下这个问题。 问题截图: 解决方式(点击链接有官方文档说明): 将远程 URL 从 SSH 切换到 HTTPS(已经是https的直接忽略) 生成细粒度token 安装Github CLI缓存token 使用 gh auth login 按提示操作登陆即可正常操作。

    2024年02月11日
    浏览(39)
  • 【git、gerrit】git 使用tag

    常常为发布上线某个版本打上一个标签,表示这是什么版本,这样后续找起来就很方便。 如果没有标签只能通过commit历史去查找,而且commit版本显示的都是一串2dad2sdfa字符串。 tag操作本质是对某次commit进行额外的打标签,因此依附于某次commit ,甚至可以一一对应 首先要切换

    2024年02月05日
    浏览(26)
  • Git tag使用

    tag常被称作里程碑,发版Release时用到。 怎么添加tag? 问 : 刚修改完代码 还未 Commit 可以直接 git tag v2.4.6.1 -m \\\"[Update]更新proxy@379ac539\\\"吗? 答: 不可以, git tag 命令是用来给已经存在于 Git 历史中的提交打标签的。如果你刚刚修改了代码但还没有进行提交,那么这些更改尚未

    2024年01月20日
    浏览(30)
  • git 使用tag

    常常为发布上线某个版本打上一个标签,表示这是什么版本,这样后续找起来就很方便。 如果没有标签只能通过commit历史去查找,而且commit版本显示的都是一串2dad2sdfa字符串。 tag操作本质是对某次commit进行额外的打标签,因此依附于某次commit ,甚至可以一一对应 首先要切换

    2024年02月04日
    浏览(23)
  • 使用git在Github上创建自己的项目及一些基础操作

    Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

    2024年02月08日
    浏览(41)
  • 项目如何打tag(如何使用git的tag命令)

    在项目中打 tag 可以使用 Git 的 tag 命令来实现。下面是具体的步骤: 1、进入项目目录 在终端中进入项目的根目录。 2、确认当前分支 使用 git branch 命令确认当前所在的分支。如果不是想要打 tag 的分支,可以使用 git checkout 命令切换到目标分支。 3、打 tag 使用 git tag 命令来

    2024年02月04日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包