131

我已经使用 git 大约一年了,并且想使用标记来标记不同版本的提交。我已经找到了很多关于用于处理标签的命令的信息,但我想知道的是,如果我可以创建一个名为的新分支1.1.0,而不必完全混淆我的思想,为什么还要使用标签新的 git 命令集?

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

4

6 回答 6

166

标签是不可变的。

而您可以创建一个名为“1.0.0”的分支 - 您或任何具有提交权限的人也可以简单地推送到该分支(有意或无意)并更改 1.0.0 的含义。

一旦你创建了一个标签,你就不能用一个标签来做到这一点——就是这样;标签 1.0.0 就是这个意思,不能更改*

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

* 您可以删除并重新创建标签,从而更改标签,但绝非偶然。

于 2012-03-21T18:07:05.820 回答
110

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

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

编辑:是使用 git 的好方法,我用于所有项目。

于 2012-03-21T17:57:43.920 回答
25

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

在发布版本时,您通常希望标记构建该版本的代码的“快照”,并且即使您继续改进代码,您也希望它保持这种标记方式,因此您会使用标签。

如果您尝试为此使用分支,它可能会无意中移动到不同的提交,而不是从该提交构建发布。


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

注意:我意识到这是一个老问题,但我觉得分支和标签之间的相似性(和一个关键区别)并没有在其他答案中得到尽可能清楚的充实。

于 2016-09-02T14:38:11.983 回答
18

我倾向于使用包含标签分支的工作流程。标签非常适合标记已发布的代码或显着的开发版本。分支有助于跟踪与特定版本相关的所有更改。

这是关于这种工作流程的一篇很好的文章:http: //nvie.com/posts/a-successful-git-branching-model/

于 2012-03-21T18:01:17.617 回答
6

您使用标签来记录历史中的重要提交。“这是我们在构建服务器崩溃的那个下雨的星期四为此版本使用的确切提交”。如果你使用分支而不是标签,你永远无法知道你使用的确切提交。你只知道“我们在这个分支的某个地方发布了 1.1.0 版”,除非你手动写下那个提交的确切哈希,这就是你首先使用标签的原因:)

于 2012-03-21T17:59:18.227 回答
6

除了其他答案,这是我的 2 美分。

简短答案:使用标签发布版本

长答案:我相信使用标签进行版本控制比使用分支更好。如果您需要更新版本,只需从标记的提交分支,一旦您完成该分支(很可能是修补程序分支)的工作,请在该新分支的头部创建一个带有新版本的新标签。然后,将该分支合并回 master/develop,因为您真的不应该更改发布版本,除非它是可能应该合并回源代码的修补程序。然后删除该分支,因为它不再需要。如果您需要对该新版本应用另一个修补程序,请重复相同的步骤。

请参阅以下文章中显示如何将修补程序与作者的 Git 工作流程合并的部分 - https://hackernoon.com/a-branching-and-releasing-strategy-that-fits-github-flow-be1b6c48eca2

于 2019-10-21T23:40:01.747 回答