标签介绍

  • 标签tag类似某次提交的记录,提交记录hash太不方便记忆,使用tag就可以进行有意义的标记。
  • 标签tag代码提交标记,branch分支是代码的管理和开发使用。
  • tag可以将某一次的git commit提交作为一个tag标记,这样标签就和commit-id进行了绑定。
  • 一个tag和一个commit-id绑定后,那么该tag就不能再绑定到其他commit-id,除非将该标签删除后才可以与其他commit-id再次绑定。

标签对象可以包含标签的创建者、日期、一段注释信息以及一个指针。

列出标签

git tag

输入git tag(可选参数-l或者--list )命令就可以按照字母顺序展示出来所有的tag。
image.png

按照特定模式查找标签

git tag -l "v2.*"通过*进行模糊匹配,可以查找出特定类型的tag。
⚠️:查找标签,通过匹配标签名的通配模式时,必须加上参数 -l 或者 --list

  1. git tag -l "v2.*"
  2. v2.1.0
  3. v2.1.1
  4. v2.1.2

git show

查看标签详情,使用命令: git show tagName,该命令可以显示标签的详细信息。
image.png

创建标签

标签的分类:

  • 轻量标签lightWeight:只是一个单独的提交记录引用,不包含其他信息。
  • 附注标签annoted:附注标签可以添加备注信息,包含打标签的作者、电子邮箱、日期时间等。

    轻量标签

    git tag v1.1.0就创建了一个轻量标签。
    如果对轻量标签使用git show查看信息命令,不会看到额外的标签信息,只能显示提交信息
    image.png

    附注标签

    执行命令 git tag -a tagName -m "msg"

  • -a表示的是annoted标注的简写

  • -m是message

添加的标注信息,可以通过git show tagName显示出来
image.png

对某一次提交打标签

git中存在多条提交记录,现在想对test分支的第一个提交【2135f8b】进行打标签。

  1. $ git alog
  2. * c3e4e3b (HEAD -> dev) dev
  3. | * d1ba75f (test) test2
  4. | * 2135f8b test1
  5. |/
  6. * 9d883a2 (tag: v3.1.2, tag: v3.1.1, master) annotated tag new branch
  7. | * 9923150 (newAnnotatedTagBranch) change
  8. |/
  9. * 3039369 (tag: v3.1.0) annotated tag
  10. * d6763a2 (tag: v2.1.2, tag: v2.1.1, tag: v2.1.0) tag

执行命令: git tag -a tagName commitID -m "msg"

  1. git tag -a test1 2135f8b -m "test branch first"
  2. git show test1

image.png
如果是对单一提交记录打轻量标签: git tag tagName commitID

推送标签

tag标签和branch分支一样,只是在本地创建的,要想共享给团队成员,就要推送到仓库中。

  • 推送指定tag:git push origin tagName
  • 推送本地所有未推送的标签: git push origin --tags

    删除标签

  • 直接使用命令git tag -d tagName就可以删除。不过这只是删除的本地分支。

  • 删除远程分支,有2种方式:(⚠️:若要删除远程仓库标签,首先要删除本地中的该标签)

    • git push origin --delete tagName直接删除远程的tag标签
    • git push origin :refs/tag/tagName origin和冒号直接的空格值就是要推送的远程标签名,从而达到删除的目的。

      修改标签内容

      tag标签一旦创建,就说明和某一个commitid进行绑定,一般是不建议在tag修改。如果要修改内容,需要切出一个新分支,改变代码后重新进行tag
  • git将标签定义为和分支branch同级别的概念,它不仅仅是一个提交的别名

  • git允许使用分支切换命令git checkout,将代码转向标签指定的版本 ```git

    1:先切换到要更新的标签tag

    $ git checkout v2.1.0 Note: switching to ‘v2.1.0’.

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

Or undo this operation with:

git switch -

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

HEAD is now at d6763a2 tag

执行checkout -b命令【或者switch -c】创建新分支,然后就可以在新分支上修改代码

$ git checkout -b newBranch-v2.1.2 Switched to a new branch ‘newBranch-v2.1.2’

  1. 创建出新分支,此时HEAD指针就由(v2.1.2)标签指向newBranch-v2.1.2分支。在新分支上修改代码,然后在合并到master分支上,最后将该分支删除。<br />如果需要更新原来tag标签v2.1.2的内容,需要先将原tagv2.1.2删除,然后再与新的commitID进行绑定。
  2. <a name="ClJw7"></a>
  3. ## 标签在.git目录中的位置
  4. 所有标签都会存放在 .git/refs/tags目录中
  5. ```git
  6. # 查看.git/refs/tags目录下的文件
  7. $ ls -l .git/refs/tags
  8. total 96
  9. -rw-r--r-- 1 shuai staff 41 6 14 23:02 test1
  10. -rw-r--r-- 1 shuai staff 41 6 14 21:58 v1.1.0
  11. -rw-r--r-- 1 shuai staff 41 6 14 21:58 v1.1.1
  12. -rw-r--r-- 1 shuai staff 41 6 14 21:58 v1.1.2
  13. -rw-r--r-- 1 shuai staff 41 6 14 21:59 v1.2.0
  14. -rw-r--r-- 1 shuai staff 41 6 14 21:59 v1.2.1
  15. -rw-r--r-- 1 shuai staff 41 6 14 21:59 v2.1.0
  16. -rw-r--r-- 1 shuai staff 41 6 14 22:00 v2.1.1
  17. -rw-r--r-- 1 shuai staff 41 6 14 22:00 v2.1.2
  18. -rw-r--r-- 1 shuai staff 41 6 14 22:02 v3.1.0
  19. -rw-r--r-- 1 shuai staff 41 6 14 22:03 v3.1.1
  20. -rw-r--r-- 1 shuai staff 41 6 14 22:04 v3.1.2
  21. # 查看附注v3.1.0标签的内容
  22. $ git cat-file tag v3.1.0
  23. object 303936992b482121bea68195f6525516c1de1c25
  24. type commit
  25. tag v3.1.0
  26. tagger 申帅
  27. annotated tag 0
  28. # 查看标签内容object的类型
  29. $ git cat-file -t 303936992b482
  30. $ git cat-file -t v3.1.0
  31. # 查看标签文件中的内容,实际上也是一个对象的索引
  32. $ cat .git/refs/tags/v3.1.0
  33. 32294480fd3382faa78763610a09fee028d66e4c
  34. # 可以通过对象的索引值,查看内容
  35. $ git cat-file -p 32294480fd338
  36. object 303936992b482121bea68195f6525516c1de1c25
  37. type commit
  38. tag v3.1.0
  39. tagger 申帅
  40. annotated tag 0
  • git中的标签都是一文件形式存储在.git/refs/tags目录中
  • 文件中记录的是tag的索引值
  • 通过标签名或索引值可以查看到tag对象的内容
  • tag对象的内容包括它指向的commit,tag对象就是对commit对象的封装

    关于tag标签的命令

  • git tag:查看标签列表

  • git tag -l “v1.1*”: 通过模式匹配,标签列表
  • git tag -a tagName -m “msg”: 当前分支最新一次提交打标签
  • git tag -a tagName commitID -m “msg”: 为之前的提交进行打标签
  • git tag tagName: 创建轻量标签
  • git push originLibrary tagName: 推送标签到远程仓库
  • git push originLibrary —tags:推送所有标签到远程仓库
  • git tag -d tagName: 删除本地版本库中的标签
  • git show tagName: 显示标签的详细信息