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标签回退至线上版本进行修复。
根据我的实践,调整了梧桐那时雨的操作步骤,主要是简化新建分支的方式和推送标签到远程仓库的时机
主要步骤如下:
- 根据tag拉取修复bug的分支fixbug
- 切换到fixbug分支,修改bug,发版本,打新标签
- 手动推送标签到远程
- 合并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.