10. Git标签

前言

该文章只是记录了一些自己的见解,可能并不准确,只是为了学习时的一些记录,不喜勿喷,谢谢

Git标签一般用于对于某一个比较重要的,具有里程碑意义的时刻的提交节点打上标签,做个记号,方便日后快速找到该提交节点的代码。

Git标签本质上就跟分支类似,同时指向当前最新提交节点的指针引用。

Git标签分为本地标签和远程标签,下面我们分别来看看如何使用

1. 本地标签

本地标签分为两种:

  1. 普通标签
  2. 带注释的标签

1.1 普通标签

1.1.1 创建普通标签

使用命令 git tag 标签名 来创建普通标签

[root@huangzb git1]# git tag v1.0

就这样一行,就可以创建一个普通标签

1.1.2 查看标签列表

使用命令 git tag --list

或者使用命令git tag -l

[root@huangzb git1]# git tag --list
v1.0
[root@huangzb git1]#
[root@huangzb git1]# git tag -l
v1.0

1.1.3 删除指定标签

使用命令 git tag -d 待删除的标签名

[root@huangzb git1]# git tag -d v1.0
Deleted tag 'v1.0' (was 8d09f82)
[root@huangzb git1]#
[root@huangzb git1]# git tag -l
[root@huangzb git1]#

1.1.4 查看某个标签的节点记录

使用命令 git show 带查看的标签名

[root@huangzb git1]# git tag v1.0
[root@huangzb git1]#
[root@huangzb git1]# git show v1.0
commit 8d09f829db84323eb313606dfcfb4d50eb32e464 (HEAD -> master, tag: v1.0, origin/test2, origin/master, origin/dev)
Author: 用户C <用户C@C.com>
Date:   Tue Apr 7 21:10:43 2020 +0800
 
    update heloc.txt
 
diff --git a/helloc.txt b/helloc.txt
index 1ccf34a..89211d8 100644
--- a/helloc.txt
+++ b/helloc.txt
@@ -1 +1,2 @@
hello 用户C
+hello java
[root@huangzb git1]#

1.2 带注释的标签

1.2.1 创建带注释的标签

使用命令 git tag -a 待创建的标签名 -m 自定义注释信息

[root@huangzb git1]# git tag -a v2.0 -m '重要节点2.0'

1.2.2 查看标签列表

同普通标签一致,不在重复

1.2.3 删除指定标签

同普通标签一致,不在重复

1.2.4 查看某个标签的节点记录

查看命令同 普通标签一致,但是输出的结果会稍有不同,下面来看看

[root@huangzb git1]# git show v2.0
tag v2.0
Tagger: 用户A <用户A@A.com>
Date:   Wed Apr 15 19:48:32 2020 +0800
 
重要节点2.0
 
commit 8d09f829db84323eb313606dfcfb4d50eb32e464 (HEAD -> master, tag: v2.0, tag: v1.0, origin/test2, origin/master, origin/dev)
Author: 用户C <用户C@C.com>
Date:   Tue Apr 7 21:10:43 2020 +0800
 
    update heloc.txt
 
diff --git a/helloc.txt b/helloc.txt
index 1ccf34a..89211d8 100644
--- a/helloc.txt
+++ b/helloc.txt
@@ -1 +1,2 @@
hello 用户C
+hello java
[root@huangzb git1]#

可以对比一下普通的标签输出,带注释的标签输出中多出了一段内容,如下:

tag v2.0
Tagger: 用户A <用户A@A.com>
Date:   Wed Apr 15 19:48:32 2020 +0800
 
重要节点2.0

这里展示了 版本号,邮箱,用户,已经时间和注释等等内容。

1.3 普通标签和带注释的标签本质上的区别

从表面上看,带注释的标签在使用命令 git show 标签名 的时候比普通标签多输出了一些关于注释的内容。

从本质上看,带注释的标签实际上生成了一个节点信息,在生成的节点信息中指向了此时的提交id。我们来看看

我们现在去工作空间中的 .git 目录,进入该目录中的 /refs/tags 目录中,该目录保存了相关的本地标签信息,进入后的信息如下:

[root@huangzb tags]# pwd
/root/mygit/git1/.git/refs/tags
[root@huangzb tags]# ll
total 8
-rw-r--r-- 1 root root 41 Apr 15 19:41 v1.0
-rw-r--r-- 1 root root 41 Apr 15 19:48 v2.0
[root@huangzb tags]#

可以看到该目录下有两个文件,分别是以标签名命名的文件,我们分别打开看下其内容,如下:

[root@huangzb tags]# cat v1.0
8d09f829db84323eb313606dfcfb4d50eb32e464
[root@huangzb tags]#
[root@huangzb tags]# cat v2.0
65c0e2de6cfbe7ea92a0a5a4ee9dacfbabf71fc4
[root@huangzb tags]#

可以看到,虽然我们都是基于同一个提交节点创建的标签,区别在于是否有注释,但是底层中,普通标签就是创建了一个文件,文件的内容就是指向提交节点id的指针,而带注释的标签则是新生成了一个对象,文件内容是新节点的指针,但是新的节点id中包括了此时的提交节点id。

2. 远程标签

远程标签,服务器中的标签即为远程标签。放在服务器中的标签即为共享标签。

2.1 创建远程标签

在github中,远程标签那里,可以将指定标签节点的所处文件进行打包下载,很方便。

创建远程标签有两种方式

  1. 在github中通过页面按钮点击方式创建远程标签
  2. 将本地标签推送到服务器中,自动生成远程标签

这里就不介绍在github中创建远程标签了,演示第二种方式。

这里需要注意一点:通过命令 git push origin src:target 的方式默认是不会将标签推送到服务器中的。

2.1.1 一个一个的推送到服务器

使用命令 git push origin 本地标签名 即可将指定本地标签推送到服务器中,操作如下:

[root@huangzb git1]# git tag --list
v1.0
v2.0
[root@huangzb git1]#
[root@huangzb git1]# git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/duguxiaobiao/study-git.git
 * [new tag]         v1.0 -> v1.0
[root@huangzb git1]#
[root@huangzb git1]#

上述的操作是推送一个本地标签,如果我们想将本地的两个标签同时推送到服务器中如何操作呢,如下:

[root@huangzb git1]# git push origin v1.0  v2.0
Counting objects: 1, done.
Writing objects: 100% (1/1), 166 bytes | 166.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To https://github.com/duguxiaobiao/study-git.git
 * [new tag]         v2.0 -> v2.0
[root@huangzb git1]#

这样就可以将多个标签同时推送到服务器中了。但是如果有很多个本地标签,这样写起来很麻烦,就可以看下面如何同时将多个标签全部一次性推动到服务器中

2.1.2 一次性将本地标签全部推动到服务器中

使用命令 git push origin --tags 即可

[root@huangzb git1]# git push origin --tags
Everything up-to-date
[root@huangzb git1]#

这里显示都是最新的,因为在上步骤中已经将本地的所有标签都推动到了服务器中,所以是最新的。

2.2 删除指定远程标签

删除远程标签有两种方式

2.2.1 使用命令 git push origin :refs/tags/标签名

[root@huangzb git1]# git push origin  :refs/tags/v1.0
To https://github.com/duguxiaobiao/study-git.git
 - [deleted]         v1.0
[root@huangzb git1]#

2.2.2 使用命令 git push origin -d refs/tags/标签名

[root@huangzb git1]# git push origin -d refs/tags/v2.0
To https://github.com/duguxiaobiao/study-git.git
 - [deleted]         v2.0
[root@huangzb git1]#

2.3 拉取远程标签到本地

使用正常的拉去代码的命令就能将标签信息拉取到本地来

[root@huangzb mystudy-git]# git pull
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1 (delta 0), reused 1 (delta 0), pack-reused 0
Unpacking objects: 100% (1/1), done.
From https://github.com/duguxiaobiao/study-git
 * [new tag]         v1.0       -> v1.0
 * [new tag]         v2.0       -> v2.0
Already up to date.
[root@huangzb mystudy-git]# git tag -l
v1.0
v2.0
[root@huangzb mystudy-git]#
原文地址:https://www.cnblogs.com/duguxiaobiao/p/12714086.html