Git 标签



Git 标签是一种突出项目历史中重要事件的方法。

除了解释许多 readily available 的标签类型外,它还将了解如何查找现有标签、添加新标签以及删除它们。这些点通常与版本发布(如 v1.0、v2.1 等)或项目开发中的里程碑相关。

标签的基本语法

与随着添加新提交而可能随时间推移移动的分支不同,标签是不可变的——它始终指向同一个提交。

Git 中有两种类型的标签

  • 轻量级标签:就像书签一样,它们只是指向特定提交的直接指针。它们不存储任何额外信息,例如消息或标签者详细信息。

  • 附注式标签:可以将它们视为更复杂的书签。它们存储额外的元数据,例如标签者的姓名、日期和消息。当我们标记版本时,附注式标签是首选类型,因为它们更具描述性并提供更多历史信息。

在 Git 中创建和管理标签的语法很简单。这是一个示例

git tag <tag-name>

例如

git tag v1.0

此命令将创建一个名为v1.0的轻量级标签,该标签指向当前分支中的最新提交。

要创建附注式标签,请使用`-a`选项

git tag -a <tag-name> -m "Tag message"

例如

git tag -a v1.0 -m "Initial release"

这将创建一个名为v1.0的附注式标签,并附加消息`初始版本`。

Git 标签类型

如前所述,主要有两种类型的标签:轻量级标签和附注式标签。让我们详细探讨这两种类型。

轻量级标签

轻量级标签本质上是指向特定提交的指针。这就像创建一个不会移动的分支。轻量级标签没有任何附加的元数据,例如消息或时间戳,它们主要用于临时或快速标记任务。

要创建轻量级标签,只需运行

git tag v1.0

此标签现在将指向当前分支中的最新提交。我们还可以通过提供其哈希值来标记特定提交

git tag v1.0 <commit-hash>

轻量级标签易于创建,但缺乏附注式标签提供的详细信息。因此,通常不建议将它们用于标记重要版本。

附注式标签

另一方面,附注式标签是存储元数据的完整 Git 对象。当我们创建附注式标签时,Git 会记录创建标签的人员、创建标签的时间以及附带的消息。

在 Git 中生成附注式标签时,我们可以使用-m选项提供标签消息。

git tag -a v1.0 -m "Version 1.0 release"

这将创建一个名为`v1.0`的标签,并带有注释“1.0 版本发布”。要查看附注式标签的详细信息,请运行以下命令

git show v1.0

这显示了标签者信息、标记日期和注释消息后的提交信息。

标记较旧的提交

即使我们在提交之后又进行了其他操作,我们仍然可以标记它。即有时,我们可能需要回到历史记录并标记较旧的提交。为此,只需在创建标签时提供提交哈希值即可

git tag v1.0 <commit-hash>

例如

git tag -a v1.0  -m "Version 1.0 release"

此命令将在指定的提交上创建一个附注式标签,允许我们追溯地标记项目历史记录中的重要点。

将标签推送到远程仓库

默认情况下,当我们运行git push时,标签不会自动推送到远程仓库。要推送标签,我们需要在推送命令中明确包含它们。

要将单个标签推送到远程仓库,请使用以下命令

git push origin <tagname>

例如

git push origin v1.0

要将所有标签推送到远程仓库,请使用--tags选项

git push origin --tags

删除标签

使用以下命令从本地仓库删除标签。即使执行此操作后,远程服务器上仍然存在该标签。

git tag -d <tagname>

例如

git tag -d v1.0

如果标签已推送到远程仓库,我们也需要从远程仓库中删除它。要从远程服务器删除标签,请遵循以下命令。

使用以下命令是第一种方法。

git push origin --delete <tagname>
  • 使用此方法,远程服务器名称(通常为origin)后跟命令git push

  • 但是,我们在分支名称的位置指定了{<tagname>}。

  • 通过这样做,Git 会被指示从远程服务器删除给定的{<tagname>}标签。

例如

git push origin --delete v1.0

检出标签

我们可以执行git checkout标签以查看与该标签链接的文件版本。

但是,此操作会使我们的仓库处于分离的 HEAD状态,这会产生某些不利影响。

git checkout t1.9a
Note: switching to 't1.9a'.

You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, 
and you can discard any commits you make in this state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. Example:

 git switch -c <new-branch-name>

Or undo this operation with :

 git switch -

Turn off this advice by setting config variable advice.detachedHead to false

Head is now at cc086fa user interface added

具体来说,在此状态下进行的任何更改和提交都不会是任何分支的一部分,只能通过其唯一的提交哈希值访问,这不会修改标签。

$ git checkout -b type2 t2.0
Previous HEAD position was cc086fa user interface added
Switched to a new branch 'type2'

如果我们需要进行修改,例如修复早期版本的错误,通常建议创建一个分支。

Git 标签最佳实践

要有效地使用 Git 标签,请遵循以下最佳实践

  • 对版本发布使用附注式标签:附注式标签提供更多信息和上下文,使其成为标记重要点(如版本发布)的理想选择。

  • 遵循一致的命名约定:为标签采用一致的命名方案,例如使用 v1.0、v1.1 等。这有助于保持标签井然有序且易于理解。

  • 将标签推送到远程仓库:确保将标签推送到远程仓库,以便其他协作者可以看到并使用它们。

  • 标记主要版本和次要版本:标记主要版本和次要版本(例如,v1.0 和 v1.0.1)有助于识别代码在不同稳定性级别上的状态。

广告