Git 系列教程(9)- 打标签

摘要:
命令只会显示出提交信息$gitshowv1.4-lwcommitca82a6dff817ec66f44342007202690a93763949Author:ScottChaconDate:MonMar1721:52:112008-0700changedtheversionnumber后期打标签也可以对提交历史打标签实际栗子假设提交历史是这样的$gitlog--pretty=oneline15027957951b64cf874c3557a0f3547bd83b3ff6Mergebranch'experiment'a6b4c97498bd301d84096da251c98a07c7723e65beginningwritesupport0d52aaab4479697da7686c15f77a3d64d9165190onemorething6d52a271eda8725415634dd79daabbc4d9b6008eMergebranch'experiment'0b7434d86859cc7b8c3d5e1dddfed66ff742fcbcaddedacommitfunction4682c3261057305bdd616e23b64b0857d832627baddedatodofile166ae0c4d3f420721acbb115cc33848dfcc2121astartedwritesupport9fceb02d0ae598e95dc970b74767f19372d61af8updatedrakefile964f16d36dfccde844893cac5b347e7b3d44abbccommitthetodo8a5cbc430f1a9c3d00faaeffd07798508422908aupdatedreadme现在,假设在v1.2时你忘记给项目打标签,也就是在“updatedrakefile”的提交历史补打标签你可以在之后补上标签。这将会把所有不在远程仓库服务器上的标签全部传送到那里。

打标签

一般会给提交历史打个标签,方便后续进行筛选、查看

列出标签

可带上可选的-l选项--list

$ git tag
v1.0v2.0

这个命令以字母顺序列出标签

可以按照特定的模式查找标签

例如,Git 代码仓库包含标签的数量超过 500 个,只想查 v1.8.5 相关的内容

$ git tag -l "v1.8.5*"v1.8.5v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2
v1.8.5-rc3
v1.8.5.1v1.8.5.2v1.8.5.3v1.8.5.4v1.8.5.5

标签的分类

Git 支持两种标签

  • 轻量标签(lightweight)
  • 附注标签(annotated)

轻量标签

很像一个不会改变的分支,它只是某个特定提交的引用

附注标签

  • 是存储在 Git 数据库中的一个完整对象,它们是可以被校验的
  • 其中包含打标签者的名字、电子邮件地址、日期时间, 此外还有一个标签信息,并且可以使用 GNU Privacy Guard (GPG)签名并验证
  • 通常会建议创建附注标签,这样可以拥有以上所有信息
  • 但是如果你只是想用一个临时的标签, 或者因为某些原因不想要保存这些信息,那么也可以用轻量标签。

附注标签相关命令

创建附注标签

在运行tag命令时指定-a选项

$ git tag -a v1.4 -m "my version 1.4"$ git tag
v0.1v1.3v1.4

-m选项指定了一条将会存储在标签中的信息,如果不加,就会要求你手动输入

Git 系列教程(9)- 打标签第1张

查看标签信息和提交信息

通过使用git show命令可以看到标签信息和与之对应的提交信息

$ git show v1.4tag v1.4Tagger: Ben Straub <ben@straub.cc>Date:   Sat May 3 20:19:12 2014 -0700
my version 1.4
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>Date:   Mon Mar 17 21:52:11 2008 -0700
    changed the version number

输出显示了打标签者的信息、打标签的日期时间、附注信息,然后显示具体的提交信息

轻量标签相关命令

本质上是将提交校验和(SHA,那串很长的乱码)存储到一个文件中,没有保存任何其他信息

创建轻量标签

不需要使用-a-s-m选项,只需要提供标签名字

$ git tag v1.4-lw
$ git tag
v0.1v1.3v1.4v1.4-lw
v1.5

这时,如果在标签上运行git show,你不会看到额外的标签信息。 命令只会显示出提交信息

$ git show v1.4-lw
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>Date:   Mon Mar 17 21:52:11 2008 -0700
    changed the version number

后期打标签

也可以对提交历史打标签

实际栗子

假设提交历史是这样的

$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'a6b4c97498bd301d84096da251c98a07c7723e65 beginning writesupport
0d52aaab4479697da7686c15f77a3d64d9165190 one morething
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function4682c3261057305bdd616e23b64b0857d832627b added a todo file166ae0c4d3f420721acbb115cc33848dfcc2121a started writesupport
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme

现在,假设在 v1.2 时你忘记给项目打标签,也就是在 “updated rakefile” 的提交历史

补打标签

你可以在之后补上标签。 要在那个提交上打标签,你需要在命令的末尾指定提交的校验和(或部分校验和)

git tag -a v1.2 9fceb02

查看补打标签的信息

$ git tag
v0.1v1.2v1.3v1.4v1.4-lw
v1.5
$ git show v1.2tag v1.2Tagger: Scott Chacon <schacon@gee-mail.com>Date:   Mon Feb 9 15:32:16 2009 -0800
version 1.2commit 9fceb02d0ae598e95dc970b74767f19372d61af8
Author: Magnus Chacon <mchacon@gee-mail.com>Date:   Sun Apr 27 20:43:35 2008 -0700
    updated rakefile
...

共享标签

  • 默认情况下,git push命令并不会传送标签到远程仓库服务器上
  • 在创建完标签后你必须显式地推送标签到远程仓库上

推送标签的语法格式

git push <remote> <tagname>

实际栗子

polo@B-J5D1MD6R-2312 watermarker % git push origin2 1.11枚举对象中: 17, 完成.
对象计数中: 100% (17/17), 完成.
使用 12个线程进行压缩
压缩对象中: 100% (12/12), 完成.
写入对象中: 100% (14/14), 1.47 KiB | 1.47 MiB/s, 完成.
总共 14(差异 6),复用 0(差异 0),包复用 0remote: Powered by GITEE.COM [GNK-5.0]
To gitee.com:poloyy/watermarker.git
 * [new tag]         1.11 -> 1.11

一次性推送过个标签

如果想要一次性推送很多标签,也可以使用带有--tags选项的git push命令。 这将会把所有不在远程仓库服务器上的标签全部传送到那里。

git push origin2 --tags
枚举对象中: 6, 完成.
对象计数中: 100% (6/6), 完成.
使用 12个线程进行压缩
压缩对象中: 100% (4/4), 完成.
写入对象中: 100% (5/5), 452 字节 | 452.00 KiB/s, 完成.
总共 5(差异 2),复用 0(差异 0),包复用 0remote: Powered by GITEE.COM [GNK-5.0]
To gitee.com:poloyy/watermarker.git
 * [new tag]         1.2 -> 1.2
 * [new tag]         1.3 -> 1.3

现在,当其他人从仓库中克隆或拉取,他们也能得到这些标签

删除标签

删除掉本地仓库上的标签,加个 -d 就行

polo@B-J5D1MD6R-2312 watermarker %git tag
1.11
1.2
1.3testbu
v1.1polo@B-J5D1MD6R-2312 watermarker % git tag -d 1.11已删除标签 '1.11'(曾为 9baca61)
polo@B-J5D1MD6R-2312 watermarker % git tag -d 1.2已删除标签 '1.2'(曾为 e4da7ac)
polo@B-J5D1MD6R-2312 watermarker % git tag -d 1.3已删除标签 '1.3'(曾为 bf12eaa)
polo@B-J5D1MD6R-2312 watermarker %git tag
testbu
v1.1

-d 删除标签并不会从任何远程仓库中删除这个标签

删除远程仓库的标签

第一种,--delete

$ git push origin --delete <tagname>

简单粗暴的方式

栗子

polo@B-J5D1MD6R-2312 watermarker % git push origin2 --delete 1.2remote: Powered by GITEE.COM [GNK-5.0]
To gitee.com:poloyy/watermarker.git
 - [deleted]         1.2polo@B-J5D1MD6R-2312 watermarker % git push origin2 --delete 1.3remote: Powered by GITEE.COM [GNK-5.0]
To gitee.com:poloyy/watermarker.git
 - [deleted]         1.3

第二种 ,传空值

git push <remote> :refs/tags/<tagname> 

将冒号前面的空值推送到远程标签名,从而高效地删除它

栗子

polo@B-J5D1MD6R-2312 watermarker % git push origin2 :refs/tags/1.11remote: Powered by GITEE.COM [GNK-5.0]
To gitee.com:poloyy/watermarker.git
 - [deleted]         1.11

checkout 标签

  • 如果想查看某个标签所指向的文件版本,可以使用git checkout命令
  • 但仓库处于“分离头指针(detached HEAD)”的状态,会有些小问题存在
polo@B-J5D1MD6R-2312 watermarker %git status
头指针分离于 testbu
无文件要提交,干净的工作区

checkout 的栗子

polo@B-J5D1MD6R-2312 watermarker %git checkout testbu
注意:正在切换到 'testbu'。

您正处于分离头指针状态。您可以查看、做试验性的修改及提交,并且您可以在切换
回一个分支时,丢弃在此状态下所做的提交而不对分支造成影响。

如果您想要通过创建分支来保留在此状态下所做的提交,您可以通过在 switch 命令
中添加参数 -c 来实现(现在或稍后)。例如:

  git switch -c <新分支名>
或者撤销此操作:

  git switch -
通过将配置变量 advice.detachedHead 设置为 false来关闭此建议

HEAD 目前位于 7fa175d test

查看当前所处分支

polo@B-J5D1MD6R-2312 watermarker %git branch
* (头指针在 1.2分离)
  master

能看到执行 git checkout 之后,本地分支会自动切换到头指针分支

重点

  • 在“分离头指针”状态下,如果做了某些更改然后提交它们,标签不会发生变化
  • 但新提交将不属于任何分支,并且将无法访问,除非通过确切的提交哈希才能访问,看下面的实际栗子
polo@B-J5D1MD6R-2312 watermarker %git push
fatal: 您当前不在一个分支上。
现在为推送当前(分离头指针)的历史,使用

    git push origin HEAD:<远程分支名字>

需要指定远程分支的哈希(就是那串很长的乱码字符串)

因此,如果你需要进行更改,比如你要修复旧版本中的错误,那么通常需要创建一个新分支

polo@B-J5D1MD6R-2312 watermarker % git checkout -b newtest3 1.2切换到一个新分支 'newtest3'polo@B-J5D1MD6R-2312 watermarker %git branch
  master
  newtest2
* newtest3

免责声明:文章转载自《Git 系列教程(9)- 打标签》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇RCFileInputFormat的使用方法【原创】字典攻击教务处(BurpSuite使用)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Repo】repo sync:error.GitError: cannot initialize work tree

1.Error Fetching projects: 100% (725/725), done. Checking out files: 100% (4605/4605), done.out files: 41% (1902/4605) Checking out files: 100% (4371/4371), done.out files:...

Gitea安装笔记

什么是gitea Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证. 官网:https://gitea.io/zh-cn/ 为什么要用gitea 开源免费 系统要求低,节约资源 gitea的安装(centos 7源码安装) 相关环境安装 yum install -y wget yum install -...

Jenkins环境,构建时报错 ERROR: Error fetching remote repo 'origin'

构建项目时报错 ERROR: Error fetching remote repo 'origin',主要原因就是用户凭据设置错误导致的,下面是报错时的截图。            用户凭据添加和使用步骤: 0.前提:   1) 服务器安装git;   2) git与github关联   3) Jenkins设置了git路径。    1.去服务查看私钥:...

mac配置git和github

1,安装git 查看mac上是否已安装git git --version 如果没有,可以通过安装Xcode后配置,或者通过 xcode-select --install 安装。具体安装方法请百度。 2,创建github账号 创建github的邮箱后面会用到 3,创建ssh,配置本地git 参考:Git - 初次运行 Git 前的配置 (git-scm.co...

用Python操作git命令

import os from git.repo import Repo from git.repo.fun import is_git_dir class GitRepository(object): """ git仓库管理 """ def __init__(self, local_path, repo_url, br...

Git在已有的分支上新建个人分支开发

在Dev分支上新建一个分支(可以通过Git TE网页创建) 然后就可以从Source下拉列表中看到新建的分支(new_name1)了。 远程分支创建完成之后,就可以在本机上面使用Git GUI Here去拉远程的分支到本地: 1)在适当目录下右键->Git GUI Here 2)Clone Existing Repository 3)填远程SSH...