git打标签
1、打标签
两种方式,任选其一
(1)轻量标签
轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。
git tag 标签名
例:git tag V1.0
(2)附注标签
附注标签是存储在 Git 数据库中的一个完整对象, 它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间, 此外还有一个标签信息,并且可以使用 GNU Privacy Guard (GPG)签名并验证。 通常会建议创建附注标签,这样你可以拥有以上所有信息。但是如果你只是想用一个临时的标签, 或者因为某些原因不想要保存这些信息,那么也可以用轻量标签。
git tag -a 标签名 -m "备注信息"
例:git tag -a V2.0 -m "my version 2.0"
2、推送到远程服务器
创建完标签后必须显式地推送标签到远程服务器上,别人才能看到。
-- push单个tag,命令格式为:git push origin 标签名
例:git push origin V1.0
-- push所有tag,命令格式为:git push [origin] --tags
例:git push origin --tags
拓展:
1、移动标签(强制更新标签)
git tag --force V1 #强制更新标签
git push origin V1 --force #推送到远程仓库
说明:3月20打了一个标签V1,但有人漏提交代码,在3月21重新提交了,此时想把新提交的代码也打入V1 tag中。可以采用强制打标签方式。
当使用 git tag
命令创建一个标签时,如果当前标签名称已经存在,则 Git 会拒绝创建,并给出错误提示。如果你需要在同一个标签名上更新标签信息或添加注释信息,可以使用 git tag --force
命令来强制更新标签。
使用 git tag --force
命令会覆盖掉已有的同名标签,因此修改标签信息时需要慎重。
1、列出所有标签
简单列出:git tag
详细列出:git log --tags --simplify-by-decoration --pretty="format:%ai %d"
2、查看某个标签的信息
git show 标签名
例:git show V1.0
3、根据关键词搜索标签
git tag -l *关键词* --sort=committerdate
例:git tag -l *V1.0.3* --sort=committerdate
4、删除标签
要删除掉你本地仓库上的标签,可以使用命令 git tag -d <tagname>
。 例如,可以使用以下命令删除一个轻量标签:
$ git tag -d v1.4-lw
Deleted tag 'v1.4-lw' (was e7d5add)
注意上述命令并不会从任何远程仓库中移除这个标签,你必须用 git push <remote> :refs/tags/<tagname>
来更新你的远程仓库:
第一种变体是 git push <remote> :refs/tags/<tagname>
:
$ git push origin :refs/tags/v1.4-lw
To /git@github.com:schacon/simplegit.git
- [deleted] v1.4-lw
上面这种操作的含义是,将冒号前面的空值推送到远程标签名,从而高效地删除它。
第二种更直观的删除远程标签的方式是:
$ git push origin --delete <tagname>
5、检出标签
如果你想查看某个标签所指向的文件版本,可以使用 git checkout
命令, 虽然这会使你的仓库处于“分离头指针(detached HEAD)”的状态——这个状态有些不好的副作用:
$ git checkout 2.0.0
Note: checking out '2.0.0'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch>
HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final
$ git checkout 2.0-beta-0.1
Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final
HEAD is now at df3f601... add atlas.json and cover image
在“分离头指针”状态下,如果你做了某些更改然后提交它们,标签不会发生变化, 但你的新提交将不属于任何分支,并且将无法访问,除非通过确切的提交哈希才能访问。 因此,如果你需要进行更改,比如你要修复旧版本中的错误,那么通常需要创建一个新分支:
$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'
如果在这之后又进行了一次提交,version2
分支就会因为这个改动向前移动, 此时它就会和 v2.0.0
标签稍微有些不同,这时就要当心了。