本系列笔记整理自廖老师的 Git 教程
开发完成,发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
Git有commit,为什么还要引入tag?
我们在日常开发中,为了尽量保证数据安全和板块逻辑清晰,会尽量按照小模块小功能来提交 commit ,这样,某两个版本中间,可能就会有很多的 commit,如果我们要查看某个版本,就相当的麻烦,tag 帮助我们清晰的定位了各个大的版本。
创建标签
使用 git tag tagVersion
可以快速方便的创建一个标签
$ git tag v1.0.0
使用 git tag
可以查看我们创建了哪些标签
$ git tag
v1.0.0
使用 git tag tagVersion commit_id
对某个历史commit 打 tag 。
$ git log --pretty=oneline --abbrev-commit
b6e3d60 (HEAD -> master, tag: v1.0.0, origin/master, origin/HEAD, dev) 新功能开发完成,合并到 mater分支
cb75959 新功能开发完成
6a5ba4c bug修复后合并到 dev 分支
9a864d0 修复 bug 666
5e44f74 在 dev 分支开发进度进行到了 70%
d2d724d bug 出现
833b087 --no-f 分分支管理策略
bfd0415 新增分支管理策略文字
f830213 merge
34ed366 master
fe4a7e8 dev
d0398e5 commit dev
8cd7e8d commit master
1895051 commit dev
a6de0c0 use ssh
0d5868b update description
f6c6e51 first commit
6a325a8 save changes
bab594b 提交修改
39b16df add new file and change README
daa5a4c 新增文件第二次(真)
fa5cb84 新增文件第二次
f2c92b3 add README
比如我们要对 新增分支管理策略文字
这个 commit 打上标签,那么通过上面的 log 获取到 commit_id 以后,直接使用 git tag tagVersion commit_id
即可。
$ git tag v0.0.5 bfd0415
$ git tag
v0.0.5
v1.0.0
注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
操作标签
如果标签打错了,没有推送到远程仓库的话,直接在本地删除即可: git tag -d <tagVersion>
$ git tag -d v0.0.5
Deleted tag 'v0.0.5' (was bfd0415)
因为创建的标签都只存储在本地,不会自动推送到远程。如果要推送某个标签到远程,使用命令git push origin <tagname>
$ git push origin v1.0.0
Total 0 (delta 0), reused 0 (delta 0)
To github.com:chen2tu/GitLearn.git
* [new tag] v1.0.0 -> v1.0.0
或者,一次性推送全部尚未推送到远程的本地标签:git push origin --tags
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除 git tag -d <tagVersion>
,然后,从远程删除。删除命令也是push,但是格式为 git push origin :refs/tags/tagVersion
,注意 refs
前面的冒号。
$ git tag -d v1.0.0
Deleted tag 'v1.0.0' (was b6e3d60)
$ git push origin :refs/tags/v1.0.0
To github.com:chen2tu/GitLearn.git
- [deleted] v1.0.0
总结
命令 git push origin <tagname>
可以推送一个本地标签;
命令git push origin --tags
可以推送全部未推送过的本地标签;
命令git tag -d <tagname>
可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>
可以删除一个远程标签。
感想
Git 的八篇笔记终于完成了,感谢廖老师提供的通俗易懂的教程,以前就会 pull,push。对于分支,冲突,标签,策略等概念感到恐惧,整个教程学习下来,明白了 Git 工作的原理,发现一切不是那么难。最重要的一点,还是要上手练习,抛开每天用的各种图形化工具,一个命令行一个命令行的敲下来,看看每条命令行有什么效果。
慢慢来,比较快,脚踏实地,水滴石穿。技能树又点亮了一颗。虽然整个笔记过程没有涉及到各种黑科技,但是日常工作,完全够用了。感恩每一个前辈无私的提供的教程。
网友评论