为什么我应该使用标签vs.版本/版本分支?

我一直在使用git大约一年,并希望使用标记来标记不同版本的提交。 我已经find了许多有关使用标签的命令的信息,但是我想知道的是,为什么要使用标签呢?如果我可以创build一个名为1.1.0的新分支,而不需要我的脑子有一套全新的git命令?

标记而不是分支必须有很多好的理由,但我想知道这些优点是什么。

标签主要用于将来参考特定版本的项目,通过标记提交。 你当然可以使用分支,但是如果你改变了很多版本,你最终会得到很多未使用或很less使用的分支。

实际上,无论如何,标签都是没有分支的分支,只是增加了一种方法来引用特定版本的项目,以减less复杂性。

编辑: 这是一个很好的方式来使用我用于我的所有项目的git。

标签是不可变的

虽然你可以创build一个名为“1.0.0”的分支,但是你或任何拥有提交权限的人也可以简单地推送到那个分支(有意或无意)并改变1.0.0的含义。

一旦你创build了一个标签,你就不能用标签来做到这一点 – 就是这样; 标签1.0.0意味着,不能改变*

这是标签和分支之间的主要实际区别

* 您可以删除并重新创build标签,从而更改标签,但绝对不是偶然。

我倾向于使用包含标签分支的工作stream程。 标记对于标记发布的代码或者显着的开发版本是很好的。 分支对跟踪与特定版本相关的所有更改很有用。

这里有一个关于这种types的工作stream程的好书面: http : //nvie.com/posts/a-successful-git-branching-model/

您可以使用标签logging历史logging中的重要提交。 “在构build服务器崩溃的那个下雨天,这是我们用于这个版本的确切提交。” 如果你使用分支而不是标签,你永远不会知道你使用了什么确切的提交。 你只知道“我们在这个分支的某个地方发布了1.1.0版本”,除非你手动记下那个提交的确切散列值,这就是为什么你首先使用标签的原因:)

分支和标签是相同的东西(指向一个提交,也就是“ref” ),除了分支自动移动到下一个提交,而标签永远保持1在同一个提交。

制作发行版时,通常需要标记构build该发行版的代码的“快照”,并且即使在继续发展代码的情况下也希望该代码保持标记状态,因此您需要使用标记。

如果您尝试使用该分支,则可能会意外移动到另一个提交,而不是从该提交创build的。


1,除非你删除标签,当然。

注:我意识到这是一个古老的问题,但我觉得分支和标签之间的相似性(和一个关键的区别)并没有在其他答案中闪现出来。