Git笔记之标签

发布一个版本时,我们通常先在版本库中打一个标签,这样建立了一个索引快捷的指向某一次提交。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。其实它就是指向某个commit的指针,跟分支很像,但是分支可以移动,标签不能移动。

标签的常用命令

git tag #查看所有标签

git tag  #加标签

git log --pretty=oneline --abbrev-commit #找到历史提交的commit ID

git tag   #对某个commit打标签

git tag -a v0.1 -m "version 0.1 released" 3628164
#还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字

git tag -d  #删除某个标签

git push origin  #将某个标签推送到远程

git push origin --tags #一次性推送全部的标签到远程

git push origin :refs/tags/ #删除远程仓库的标签

git fetch origin tag  #拉取远程仓库的指定标签的代码

git branch   #根据标签名创建分支

添加标签并推送

在push代码到远程仓库时,不会推送标签,所以需要我们主动推送标签git push origin <tag name>

git tag -a v1.0.0 -m "version 1.0.0 released"
git push origin v1.0.0

删除错误标签

git tag -d v1.0.0   #删除本地
git push origin :refs/tags/v1.0.0   #删除远程仓库标签

通过标签回退版本修复bug

该章节转摘于梧桐那时雨,详细步骤可到原blog查看。

如果线上版本遇到bug,需要紧急修复并发布,可是这个时候我们的代码新功能已经开发了到一半了,不能回退,怎么办呢?这时候就可以通过tag标签回退至线上版本进行修复。

根据我的实践,调整了梧桐那时雨的操作步骤,主要是简化新建分支的方式和推送标签到远程仓库的时机

主要步骤如下:

  1. 根据tag拉取修复bug的分支fixbug
  2. 切换到fixbug分支,修改bug,发版本,打新标签
  3. 手动推送标签到远程
  4. 合并fixbug分支到主干上
#1
git tag     #查看所有标签
git branch fixbug   # 根据tag新建分支

#2
git checkout fixbug #切换至修复分支
... #修复bug... 
git add a.txt   
git commit -m "修复bug" # 提交
git tag v2.0    #打标签

#3
git push origin --tags  #推送所有标签
git push origin v2.0  #推送指定标签

#4
git checkout master #先切换到主干上
git merge fixbug    #再合并修改bug的分支
... #合并分支

注意

在分支上建立的tag,分支删除后还存在吗

经过测试,tag并不属于某一个分支,所以在删除分支时,在该分支上打的标签依然存在,指向的是当前分支的上一次commit。

标签更多的是一种指向某一次提交的快捷索引,所以虽然删除了fixbug分支,但是还是可以通过git show <tag name>; git reset --hard commitID 回滚到某一次提交,对历史版本进行再次修复。

当我们commit并打上标签后,不向远程仓库推送代码,而是推送标签。那么在远程仓库的各分支中代码不会发生任何的改变,但是在该标签下却能看到本地的上一次commit.

参考资料