一直对 git tag不是了解的特别深入,现在有时间坐下来仔细写一写它了。
主要参考这篇文章.
tag就是一个标签,方便开发者在某个时刻查看内容,对,是静态的。可以想象成时间线上的flag。
tag对应某系commit, branch对应一串commits,有一个HEAD 指针,是可以依靠 HEAD 指针移动的。所以,改动代码用branch,查看代码用tag。
tag和branch可以配合使用。比如,已经发布了 v0.1 v0.2 v0.3三个版本,这个时候,如果想在v0.2的基础上(也就是不改动源代码当前)修改代码后发布v0.4,就可以检出v0.2作为branch然后作为开发分支,等功能完成后再次打上一个v0.4的tag发布。
tag的简单使用
创建tag
git tag <tagName> # 经常以版本号
git push origin <tagName> //推送到远程仓库
git push origin --tags #一次推送本地多条微推送的tags
以上是基于本地最后一次commit创建的tag,如果想以某次特定的 commmit 创建tag,则需如下:
git tag -a <tagName> <commitId>
查看tag
查看某个tag的详细情况:
git show <tagName>
查看本地所有的tag:
git tag
git tag -l
查看远程所有的tag:
git ls-remote --tags origin
删除tag
git tag -d <tagName> # 本地tag的删除
git push origin :<tagName> # 删除远程tag
修改tag
本意其实就是先删除旧的tag,然后创建新的tag.
如果只存在于本地,在首先删除tag,然后新建tag就可以。
git tag -d <oldTag>
git tag <newTag>
git push origin <newTag> # 推送到远程tag
如果已经推送到远程了,则不仅需要删除本地的tag,则还需要删除远程的tag,再重新创建和推送:
git tag -d <oldTag> # 删除本地的tag
git push origin :<oldTag> # 删除远程的tag
git tag <newTag> #创建新的tag
git push origin <newtag> # 推送到远程仓库
检出tag
git checkout -b <branchName> <tagName>