Git-命令行-使用 Tag 标记你的代码

前言

正文开始以前,我想咱们须要弄明白几个问题:git

1.tag 是什么?
2.使用tag 的好处?
3.tag 和 branch 的区别以及使用场景?ruby

  • tag 是什么?
    tag , 翻译过来是标签的意思,顾名思义,标签是为了标记某种事物。
    tag 是 Git 版本库的一个快照,指向某个 commit 的指针。ui

  • 使用tag 的好处?
    tag 的存在,是由于咱们须要这种标记的功能。目前的项目开发中,当发布版本时 tag 就派上用场了。例如 v1.0.1,v1.0.2…
    另外,git 提供了 tag 的增删改查一系列操做,在 tag 的使用上,可谓很是之方便。spa

  • tag 和 branch 的区别以及使用场景?
    想到这里,你可能以为 tag 和 branch 有点类似。没错,的确是有点像,可是它们的职责分工和本质都是不一样的。
    tag 对应某次 commit, 是一个点,是不可移动的。
    branch 对应一系列 commit,是不少点连成的一根线,有一个HEAD 指针,是能够依靠 HEAD 指针移动的。.net

    因此,二者的区别决定了使用方式,改动代码用 branch ,不改动只查看用 tag。翻译

    tag 和 branch 的相互配合使用,有时候起到很是方便的效果,例如 已经发布了 v1.0 v2.0 v3.0 三个版本,这个时候,我忽然想不改现有代码的前提下,在 v2.0 的基础上加个新功能,做为 v4.0 发布。就能够 检出 v2.0 的代码做为一个 branch ,而后做为开发分支。指针

tag 的简单使用

如下命令都是我使用 tag 过程当中通常会使用到的,能够说都是经常使用命令。code

1.建立标签

须要说明的是,建立 tag 是基于本地分支的 commit,并且与分支的推送是两回事,就是说分支已经推送到远程了,可是你的 tag 并无,若是把 tag 推送到远程分支上,须要另外执行 tag 的推送命令。regexp

git tag <tagName> //建立本地tag git push origin <tagName> //推送到远程仓库
  • 1
  • 2

若存在不少未推送的本地标签,你想一次所有推送的话,可使用一下的命令:xml

git push origin --tags 
  • 1
  • 2

以上是基于本地当前分支的最后的一个 commit 建立的 tag ,可是若是不想以最后一个,只想以某一个特定的提交为 tag ,也是能够的,只要你知道 commit 的 id。

git log --pretty=oneline //查看当前分支的提交历史,里面包含 commit id git tag -a <tagName> <commitId>
  • 1
  • 2

2.查看标签

查看本地某个 tag 的详细信息:

git show <tagName>
  • 1

查看本地全部 tag :

//下面两个命令均可以 git tag git tag -l
  • 1
  • 2
  • 3

查看远程全部 tag:

git ls-remote --tags origin 
  • 1
  • 2

3.删除标签

本地 tag 的删除:

git tag -d <tagName>
  • 1

远程 tag 的删除:

git push origin :<tagName>
  • 1

4.重命名标签

这个本质上是删除掉旧名字 tag ,而后再新建新名字 tag ,而后实现重命名的做用。

若是 tag 只存在本地,那么只须要删除本地的旧名字 tag ,而后新建新名字 tag:

git tag -d <oldTagName> git tag <newTagName> git push origin <newTagName> //推送到远程仓库
  • 1
  • 2
  • 3

若已经推送到远程了,那么不只要删除本地的,还要删除远程的,再从新建立和推送:

git tag -d <oldTagName>
git push origin :<oldTagName> git tag <newTagName> git push origin <newTagName> //推送到远程仓库 
  • 1
  • 2
  • 3
  • 4
  • 5

5.检出标签

命令以下:

git checkout -b <branchName> <tagName>
  • 1

由于 tag 自己指向的就是一个 commit,因此和根据 commit id 检出分支是一个道理。 可是须要特别说明的是,若是咱们想要修改 tag 检出代码分支,那么虽然分支中的代码改变了,可是 tag 标记的 commit 仍是同一个,标记的代码是不会变的,这个要格外的注意。

相关文章
相关标签/搜索