前言
该文章只是记录了一些自己的见解,可能并不准确,只是为了学习时的一些记录,不喜勿喷,谢谢
Git标签一般用于对于某一个比较重要的,具有里程碑意义的时刻的提交节点打上标签,做个记号,方便日后快速找到该提交节点的代码。
Git标签本质上就跟分支类似,同时指向当前最新提交节点的指针引用。
Git标签分为本地标签和远程标签,下面我们分别来看看如何使用
1. 本地标签
本地标签分为两种:
- 普通标签
- 带注释的标签
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中,远程标签那里,可以将指定标签节点的所处文件进行打包下载,很方便。
创建远程标签有两种方式
- 在github中通过页面按钮点击方式创建远程标签
- 将本地标签推送到服务器中,自动生成远程标签
这里就不介绍在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]#