git tag知多少
这个命令,其实很有用,类似clearcase中的label,就是给一个版本设置一个标记(标签),方便后期查找特定的版本。
tag和commit的sha1那串字符串的关系,不是很大,但是还是要说一下的。
1. 每一次修改,在本地仓库中,只有commit了,在ref中有新的相关的记录,才可以做push到远端。否则会提示你Everything is up-to-date.
[root@CloudGame mueas]# ll
total
-rw-r--r-- root root Jan : pom.xml
drwxr-xr-x root root Jan : src
[root@CloudGame mueas]# git status #git status查看当前是否有新的修改发生,结果显示没有修改。
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
[root@CloudGame mueas]# git push #push一个干净的工作目录,你会看到什么都是最新的,意思是没有必要push
Everything up-to-date
2. 没有commit得到的那个sha1的字符串,是不允许给执行git tag加标签的。否则,你会遇到错误!
[root@CloudGame hello]# ll -al #查看当前本地repo中的内容,显示什么都没有
total
drwxr-xr-x root root Jan : .
drwxr-xr-x. shihuc shihuc Jan : ..
drwxr-xr-x root root Jan : .git
[root@CloudGame hello]# git status #查看当前repo的状态信息。也是说没有东西commit
On branch master Initial commit nothing to commit (create/copy files and use "git add" to track)
[root@CloudGame hello]# git tag ht001 #创建轻量级标签ht001,提示错误
fatal: Failed to resolve 'HEAD' as a valid ref.
[root@CloudGame hello]# git tag -a ht001 -m "first one tag for initial repo" #创建注解标签,同样报错
fatal: Failed to resolve 'HEAD' as a valid ref.
根据这个提示信息,很容易知道原因,就是没有东西commit,所以不让做tag。只有commit了,才可以打标签。我们可以看看下面:
[root@CloudGame hello]# touch README.txt #创建一个文件
[root@CloudGame hello]# git status #查看状态信息。显示有意个没有被跟踪的文件
On branch master Initial commit Untracked files:
(use "git add <file>..." to include in what will be committed) README.txt nothing added to commit but untracked files present (use "git add" to track)
[root@CloudGame hello]# git add README.txt #添加README.txt到本地repo
[root@CloudGame hello]# git commit -m "README is created" #commit这个文件
[master (root-commit) d4e04d6] README is created
file changed, insertions(+), deletions(-)
create mode README.txt
[root@CloudGame hello]# git status #再次查看当前repo的信息,显示当前没有东西可以commit。工作目录是干净的。
On branch master
Your branch is based on 'origin/master', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
nothing to commit, working directory clean
[root@CloudGame hello]# vim .git/refs/heads/master
[root@CloudGame hello]# cat .git/refs/heads/master #由于当前在master分支,所以查看这个分支文件的内容,显示为当前的commit的sha1字符串
d4e04d68c5aa5b316167a1c3baa63faabb06cf80
[root@CloudGame hello]#
[root@CloudGame hello]# git log
commit d4e04d68c5aa5b316167a1c3baa63faabb06cf80
Author: chengsh <shihu.cheng@000000.com>
Date: Thu Jan :: + README is created
最后,在有了这个commit的内容后,先检查下.git/refs/tags/目录下有没有内容!从下面的日志看,是什么都没有的,空的。
[root@CloudGame hello]# ll .git/refs/
total
drwxr-xr-x root root Jan : heads
drwxr-xr-x root root Jan : tags
[root@CloudGame hello]# ll .git/refs/tags/
total
那么,这个时候添加tag,会是什么样子呢?往下看:
[root@CloudGame hello]# git tag -a ht001 -m "first tag" #添加一个注解类型的标签,添加基本类型(轻量级)的也同样可以。
[root@CloudGame hello]#
[root@CloudGame hello]# ll .git/refs/tags/ #查看tags目录下有没有东西,显示有一个标签命名的文件
total
-rw-r--r-- root root Jan : ht001
[root@CloudGame hello]#
[root@CloudGame hello]# cat .git/refs/tags/ht001 #查看这个标签文件内容是什么,一串字符
6e032b380494c7a230686a00533ea4ad1ab2961a
到此,可以看出tag和commit的关系了吧。要想tag,必须先有commit。clearcase当中,可以给一个节点添加多个label,那git里面能否给一个commit号(sha1字符串)添加多个标签呢?我们往下看:
[root@CloudGame hello]# git tag ht002
[root@CloudGame hello]#
[root@CloudGame hello]# ll -al .git/refs/tags/
total
drwxr-xr-x root root Jan : .
drwxr-xr-x root root Jan : ..
-rw-r--r-- root root Jan : ht001
-rw-r--r-- root root Jan : ht002
[root@CloudGame hello]# cat .git/refs/tags/ht002
d4e04d68c5aa5b316167a1c3baa63faabb06cf80
[root@CloudGame hello]#
上面的操作日志显示,给同一个commit后的操作,添加多个tag是可以的,每次的tag标签对应的sha1字符串不同。
下面看看,操作tag后,gitk显示的内容是什么?

再来看看ht002标签的信息对应的内容:

从上图,可以发现,基本类型的tag对应的信息,那个sha1串头是tree字样。而注解类型的tag中sha1串头对应的字样是object。这也是一个小区别。
下面,列举一下tag常见的操作指令:
| 切换到标签 | git checkout <tagname> |
| 查看标签的版本信息 | git show <tagname> |
| 删除标签 | git tag -d <tagname> |
| 给指定的commit打标签 | git tag -a <tagname> [-m <your comment>] <commit-sha1-id> |
| 发布指定的标签到远程仓库 | git push origin <tagname> |
| 将本地的标签全部发布到远程仓库 | git push origin --tags |
| 查看当前分支下的所有标签信息 | git tag |
| 删除远程tag |
git tag -d <tagname>; git push origin :<tagname> |
最后补充说明一下,通常git push的时候,标签信息是不会被一起发布到远程仓库的。删除远程分支和标签类似,都是先删除本地的分支或则标签,然后push这个分支或则标签到远程仓库。都要注意的一点就是origin与冒号之间有一个空格。否则会出错的。
git tag知多少的更多相关文章
- git必知必会
1. Git 配置 --system #系统级别--global #用户全局--local #单独一个项目 git config --global user.name "xxxx" ...
- repo 导出本地 git tag 给他人
背景 使用 repo 管理了多个 git 仓库,有时需要将本地仓库的tag同步给其他人,但又不能直接推到远程(例如权限问题). 实际场景举例 本地复现了一个问题,需要让其他人回退到相同环境来排查. 本 ...
- git tag使用标记
git跟其它版本控制系统一样,可以打标签(tag), 作用是标记一个点为一个版本号,如0.1.3, v0.1.7, ver_0.1.3.在程序开发到一个阶段后,我们需要打个标签,发布一个版本,标记的作 ...
- Git tag push 到远端仓库
很早之前,我们就提到过用Git tag来给工程打上标签,但是这个命令只是在本地仓库打标签而已, 为了能把标签同步到远程服务器,我们可以这样做: 默认情况下,git push并不会把tag标签传送到远端 ...
- git tag — 标签相关操作
标签可以针对某一时间点的版本做标记,常用于版本发布. 列出标签 $ Git tag # 在控制台打印出当前仓库的所有标签$ git tag -l 'v0.1.*' # 搜索符合模式的标签 打标签 gi ...
- Git tag 给当前分支打标签
原文已经找不到出处,重新整理格式,仅作个人收藏! 标签(Tag)可以针对某一时间点的版本做标记,常用于版本发布. 列出tag $ git tag # 在控制台打印出当前仓库的所有tag $ git t ...
- git命令之git tag 给当前分支打标签
git tag - 标签相关操作 发表于 2011年06月29日 由 机器猫 标签可以针对某一时间点的版本做标记,常用于版本发布. 列出标签 $ git tag # 在控制台打印出当前仓库的所有标签$ ...
- git tag查看、创建与删除
tag管理 查看tag 太多的话用 grep 过滤 $ git tag | grep dev_20150525 # 创建tag $ git tag -a dev_20150525_16 -m 'xxx ...
- git tag的使用
查看所有的标签git tag 删除某一个标签git tag -d tagName 创建带注释的标签 git tag -a tagName -m "annotate" 轻量级标签 g ...
随机推荐
- Java字符串null相加
Java字符串null相加 最近和同事讨论了下面的一段代码: String a = null; a += a; System.out.println(a); 运行结果: nullnull 本着学习的态 ...
- Install Fastx (zz)
Fastx-toolkit installation on CentOS ===================================== Tested on CentOS release ...
- iOS学习笔记---c语言第十天
动态内存分配 一.存储区划分 从低到高(内存地址小----内存地址大) : 代码区---常量区---静态区---堆区---栈区 栈内存 //凡是在函数体内定义的变量 都存储在栈区(包括形参). ; ...
- CentOS终端界面登入Linux
上述图片中,前两行为CentOS的版本信息,其内容来自于/etc/issue这个档案中. 后三行:www login:其中www表示主机名(设主机名为www.vbird.tsal),主机名显示通常只取 ...
- db2 存储过程 语法 及结果集查询
第一次用存储过程,关于处理待办的,不知道怎么执行和传参数 给存储过程 ,其实就一句话很简单. @call PRC_MISSIONLIST_QUERY('27020214', '27040000', ' ...
- 权限分配界面 纯手工 仅用到bootstrap的架构 以及 c标签
<div class="form-group"> <div class="row"> <label ...
- Spring MVC 属性文件读取注入到静态字段
目录(?)[-] servlet-contextxml configproperties 示例属性 ConfigInfo 对应的配置bean 使用 在项目中,有些参数需要配置到属性文件xxx.pr ...
- Ubuntu12.04安装中文字体(转)
1.在/usr/share/fonts/下,新建文件夹winFonts,如果没有fonts目录,就安装fontconfig软件(系统字体管理),再将win7字体msyh.ttf和msyhbd.ttf复 ...
- POJ3352 Road Construction(边双连通分量)
...
- iOS 导出 ipa 包时 三个选项的意义
OS 导出 ipa 包时 三个选项的意思 如图 在 iOS 到处 ipa包的时候 会有三个选项 Save for iOS App Store Deployment Save for Ad Hoc D ...