学会Git 05:Git 标签管理

73 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情

Git 标签管理

标签是为了更方便地参考提交而给它标上易懂的名称。我们可以使用标签功能为我们的提交打上标签,并以此来创建版本。比如我们常见的版本号 v0.0.1, v0.0.2

Git 标签有以下两种:

  • 轻标签轻量级标签
    • 非常简略,只需要添加名称即可
  • 注解标签
    • 比较详细,包含作者、消息等,我们可以添加名称、注解消息、签名等等

一般情况下,发布标签都是采用注解标签的。可以详细展示信息。轻标签的用途一般是在本地上暂时使用或者一次性使用的。

x8aUJO.png

添加轻标签

它的语法是

git tag <tagname>

我们在main分支新增一个标签

$ git tag nutcat001

它不会返回任何信息,我们可以通过 git tag 来查看当前的标签名

$ git tag
nutcat001

也可以在历史记录中查看到标签信息

$ git log --decorate
commit bff91551b0f99a2b0983ee57a065ee8f9007792b (HEAD -> main, tag: nutcat001, origin/main)
Author: FelixWuu <账号信息>
Date:   Thu Oct 6 23:25:36 2022 +0800

    test: diff

添加注解标签

上面的轻标签仅仅有个名字,我们需要给标签加上更加详细的信息

$ git tag -a v0.0.1

要创建带注释的标记,需要使用git tag -a命令。这是你会进入一个编辑页面,这与操作 vim 界面是一样的,只需要按下 i 键然后输入你想输入的信息,然后 !wq 保存并退出。这类似于指定提交消息。如果想在命令行中就指定消息,可用-m选项:git tag -a <tag-name> -m <tag-message>

然后我们可以使用 git show 查看版本信息

$ git show v0.0.1
tag v0.0.1
Tagger: FelixWuu <账户信息>
Date:   Fri Oct 7 23:11:49 2022 +0800

First version.

commit bff91551b0f99a2b0983ee57a065ee8f9007792b (HEAD -> main, tag: v0.0.1, tag: nutcat001, origin/main)
Author: FelixWuu <账户信息>
Date:   Thu Oct 6 23:25:36 2022 +0800

    test: diff

diff --git a/example.txt b/example.txt
index f77115b..a6f8ef4 100644
--- a/example.txt
+++ b/example.txt
@@ -6,4 +6,6 @@ I'm used to merging branches with git merge.
  • First version.:使用 git tag -a v0.0.1 后,我在文本编辑器中编辑的标签信息
  • Tagger:创建者

对旧标签打 tag

如果我想对旧的版本打标签呢?我们只需要在 tag 名后面加上对应的 commit id 即可,比如

$ git log --oneline
bff9155 (HEAD -> main, tag: v0.0.1, tag: nutcat001, origin/main) test: diff
7ceb84c doc: 03.reslove conflict
...more commit info

$ git tag v0.0.2 7ceb84c

$ git tag
nutcat001
v0.0.1
v0.0.2

$ git show v0.0.2
commit 7ceb84c611e686118ece36bfe09637a8b251a068 (tag: v0.0.2)
...more info

如上步骤,我首先使用 git log --oneline,可以看到以往的提交历史,然后我们上一个提交历史是7ceb84c doc: 03.reslove conflict,是我写完文章后提交的。然后我们只需要在起的标签名后面指定commit id即可。比如上一个提交的commit id是7ceb84c

git show 显示的信息非常多,比如还会把个人账号显示出来。我们可以使用 git tag -n

$ git tag -n
nutcat001       test: diff
v0.0.1          First version.
v0.0.2          doc: 03.reslove conflict

这里可以快捷显示标签信息,其中 nutcat001v0.0.2 是轻量级标签,所以默认用 commit 时填写的信息作为描述,v0.0.1 是注解标签,它的信息是由我在创建标签时写入的,

删除标签

若要删除标签,在tag命令指定 -d选项执行。

$ git tag -d nutcat001
Deleted tag 'nutcat001' (was bff9155)

$ git tag -d v0.0.2
Deleted tag 'v0.0.2' (was 7ceb84c)

$ git tag -n
v0.0.1          First version.

推送标签到远程

$ git push origin --tags
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 166 bytes | 166.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/FelixWuu/git_test
 * [new tag]         v0.0.1 -> v0.0.1

x8aGe1.png

我们之前介绍删除标签,只是删除了本地的标签,那么应该如何删除远程的标签呢?

本地删除标签后,要在远程仓库上也删除,需要手动将标签引用(tag refs)推送到远程。

$ git push origin :refs/tags/tagname

这个tagname就是你本地已删除的tag