目录
理解标签
创建标签
操作标签
删除
推送
理解标签
标签 tag ,可以简单的理解为是对某次 commit 的⼀个标识,相当于起了⼀个别名。例如:在项目发布某个版本的时候,针对最后⼀次 commit 起⼀个 v1.0 这样的标签来标识里程碑的意义。
用处:相较于难以记住的 commit id , tag 很好的解决这个问题,因为 tag ⼀定要给⼀个让人容易记住,且有意义的名字。当我们需要回退到某个重要版本时,直接使用标签就能很快定位到。
创建标签
在 Git 中打标签非常简单。首先,切换到需要打标签的分支上。然后,敲命令 git tag [name] 就可以打⼀个新标签。
[qcr@ecs-205826 remote---project]$ git branch
* master
[qcr@ecs-205826 remote---project]$ git tag v1.0
[qcr@ecs-205826 remote---project]$ git tag
v1.0
查看打了一个标签,对本地仓库的影响。
[qcr@ecs-205826 remote---project]$ tree .git
.git
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── FETCH_HEAD
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ └── update.sample
├── index
├── info
│ └── exclude
├── logs
│ ├── HEAD
│ └── refs
│ ├── heads
│ │ └── master
│ └── remotes
│ └── origin
│ ├── HEAD
│ └── master
├── objects
│ ├── 0a
│ │ └── 6993b3df50a1aa1387b23186ac854f4da3001b
│ ├── 1e
│ │ └── ff76c90b1a1a244cbf0e278356c07f627474d0
│ ├── 3f
│ │ └── e4a1338f210805470d475d588dc82eb1c7032e
│ ├── 67
│ │ └── 5cc77ad3a0457477baeceaf34b0fc2e7e17b63
│ ├── 7b
│ │ └── 5bbd989152e5bab6b5476f50133e16137d6b30
│ ├── 9f
│ │ └── e2d15fba3cb4f104082c6d95176d31aa007972
│ ├── c3
│ │ └── 14d4d60463feca795fcc83b2b314a12d408787
│ ├── cd
│ │ └── c8ff98d8f653ce79386cea1ee536ea2cea3405
│ ├── e5
│ │ └── 32e80eaa632350e2e78337f46c9ce1a7313c56
│ ├── e6
│ │ └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│ ├── info
│ └── pack
│ ├── pack-5f4447002c72da3e6aa794706042883b44990aab.idx
│ └── pack-5f4447002c72da3e6aa794706042883b44990aab.pack
├── ORIG_HEAD
├── packed-refs
└── refs├── heads│ └── master├── remotes│ └── origin│ ├── HEAD│ └── master└── tags└── v1.026 directories, 38 files
此处确确实实在我们的本地仓库的存了一个标签,并且通过对其内部的内容进行查看可以发现,是 commit id 。
[qcr@ecs-205826 remote---project]$ cat .git/refs/tags/v1.0
e532e80eaa632350e2e78337f46c9ce1a7313c56
通过 git log 查看,可以发现其是最新的 commit id 。
[qcr@ecs-205826 remote---project]$ git log --pretty=oneline
e532e80eaa632350e2e78337f46c9ce1a7313c56 创建.gitignore
0a6993b3df50a1aa1387b23186ac854f4da3001b update file.txt.
1eff76c90b1a1a244cbf0e278356c07f627474d0 创建file.txt
f5df974f5a426de32852efa01f95abf77dc142bd Initial commit
默认标签是打在最新提交的 commit 上的。如果想在指定的 commit 上打标签,方法是找到历史提交的 commit id ,然后打上就可以了。
[qcr@ecs-205826 remote---project]$ git log --pretty=oneline --abbrev-commit
e532e80 创建.gitignore
0a6993b update file.txt.
1eff76c 创建file.txt
f5df974 Initial commit
[qcr@ecs-205826 remote---project]$ git tag v0.5 1eff76c
[qcr@ecs-205826 remote---project]$ git tag
v0.5
v1.0
Note:查看标签的顺序,不是按照 commit id 的时间来算的,而是根据英文单词排序的。
可以用 git show [tagname] 查看标签信息。
[qcr@ecs-205826 remote---project]$ git show v0.5
commit 1eff76c90b1a1a244cbf0e278356c07f627474d0
Author: chuanru <2390139574@qq.com>
Date: Mon Jul 3 02:19:40 2023 +0800创建file.txtdiff --git a/file.txt b/file.txt
new file mode 100644
index 0000000..7b5bbd9
--- /dev/null
+++ b/file.txt
@@ -0,0 +1 @@
+hello Git
Git 还提供可以创建带有说明的标签,用 -a 指定标签名, -m 指定说明文字,格式为:
git tag -a [name] -m "XXX" [commit_id]
[qcr@ecs-205826 remote---project]$ git tag -a v0.1 -m "important tag:反正很重要" f5df974
[qcr@ecs-205826 remote---project]$ git tag
v0.1
v0.5
v1.0
[qcr@ecs-205826 remote---project]$ git show v0.1
tag v0.1
Tagger: chuanru <2390139574@qq.com>
Date: Mon Jul 3 21:40:38 2023 +0800important tag:反正很重要commit f5df974f5a426de32852efa01f95abf77dc142bd
Author: 川入 <2390139574@qq.com>
Date: Sun Jul 2 16:17:37 2023 +0000Initial commitdiff --git a/.gitee/ISSUE_TEMPLATE.zh-CN.md b/.gitee/ISSUE_TEMPLATE.zh-CN.md
new file mode 100644
index 0000000..f09d98d
--- /dev/null
+++ b/.gitee/ISSUE_TEMPLATE.zh-CN.md
@@ -0,0 +1,13 @@
操作标签
删除
[qcr@ecs-205826 remote---project]$ git tag
v0.1
v0.5
v1.0
[qcr@ecs-205826 remote---project]$ git tag -d v0.5
Deleted tag 'v0.5' (was 1eff76c)
[qcr@ecs-205826 remote---project]$ git tag
v0.1
v1.0
推送
在远端仓库中也有标签的能力。
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。如果要推送某个标签到远程,使用命令 git push origin <tagname> 命令。
[qcr@ecs-205826 remote---project]$ git tag
v0.1
v1.0
[qcr@ecs-205826 remote---project]$ git push origin v0.1
Counting objects: 1, done.
Writing objects: 100% (1/1), 186 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To git@gitee.com:chuanru/remote---project.git* [new tag] v0.1 -> v0.1
[qcr@ecs-205826 remote---project]$ git push origin --tags
Total 0 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To git@gitee.com:chuanru/remote---project.git* [new tag] v1.0 -> v1.0
[qcr@ecs-205826 remote---project]$ git tag
v0.1
v1.0
[qcr@ecs-205826 remote---project]$ git tag -d v0.1
Deleted tag 'v0.1' (was 88ace8f)
[qcr@ecs-205826 remote---project]$ git push origin :v0.1
remote: Powered by GITEE.COM [GNK-6.4]
To git@gitee.com:chuanru/remote---project.git- [deleted] v0.1