Git中的标签和分支有什么区别?

25
可能是重复的问题:git中标签和分支有什么区别? 我想做的是为代码的不同版本创建检查点。所以一旦我进行了一堆提交,我想说,“好的,在代码的这个点上,这是版本0.1完成”。然后我可以再做更多的提交,并再次执行此操作并说:“好的,这个点是0.2完成的”。
我知道如何制作分支和标签......我只是不明白它们之间的区别,以及哪一个会实现我想要的功能;)

4
为什么不在提问之前先搜索一下呢?以下是需要翻译的内容:What is the difference between a tag and a branch in git? - Carl Norum
分支和标签的字典含义足以清楚地说明git中这两个术语的区别。分支强调软件的差异或不同的设计甚至不同的接口。标签只是单行上的一个里程碑。 - Kemin Zhou
4个回答

19
分支和标签本质上都是指向提交的指针。最大的区别在于,随着添加新的提交,分支指向的提交会发生变化,而标签则固定在特定的提交上,以标记某个时间点具有特定的重要性。根据Git Book的描述:
大多数版本控制系统(VCS)都具备将历史中的特定点标记为重要的能力。通常,人们使用这个功能来标记发布点(如v1.0等)。在本节中,您将学习如何列出可用的标签,如何创建新标签以及不同类型的标签是什么。
在Git中,分支只是一个轻量级的可移动指针,指向这些提交之一。

我不认为这个说法准确:“分支所指向的提交会随着你添加新的提交而改变。”这是不正确的。添加新的提交对分支或其指向的位置没有任何影响,它与特定的提交绑定,就像标签一样。 - ffxsam
@ffxsam 我相信Jimmy的意思与git词汇手册中所说的一样:分支上最近的提交被称为该分支的尖端。分支的尖端由分支头引用,随着在分支上进行额外开发而向前移动。单个git存储库可以跟踪任意数量的分支,但您的工作树仅与其中一个关联(“当前”或“签出”分支),HEAD指向该分支。 - aggregate1166877
@ffxsam 通常是正确的:添加提交并不一定会移动任何分支。@jimmy 在通常情况下是正确的:当开发人员检出一个分支,并发出 git commit 命令时,Git 将该分支移动到指向新提交。 - Keith Russell
@KeithRussell 我喜欢那些所有人都正确的罕见时刻。;) 谢谢! - ffxsam

11
一种标签代表一个特定分支在某个时刻的版本。分支表示一个独立的开发线程,可以与同一代码库上的其他开发工作并行运行。
来源: 这个重复的问题
你想要的可能是一个标签

谢谢,这很好用。有点让人困惑的是,当我去Github时,看到了很多带版本号的分支...所以我有些糊涂了。 - egervari

1
假设您有一个稳定的超级棒产品v1.0,它已经提交到了git存储库中。
您在v1.0分支中进行错误修复和更改,并使用以下标签进行标记:
  • 这个修复工作项1341 - bug ...

  • 这个版本修复了项目234324 - bug ...

  • 最终v1.0

以上都是代表代码状态(标签)的标签,当提交时会被打上。因此,当您制作v1.5并出现v1.0的错误时,您可以取final v1.0标签并在其上测试该错误。
现在!您决定更改超级棒产品的基础数据访问方式。您将分支v1.0并创建一个名为Super Awesome Product NEW DAL branch的新分支。
标签用于每日提交的快照。分支用于更大规模的更改。

5
在GitHub上随意浏览项目似乎显示相反的情况-开发人员日常使用分支,只有在表示发布或其他特殊点时才使用标签。我没有特别不寻常的工作流程,但我每天都会创建新的git分支,然而已经过去几个月我没有创建新的标签了。 - Tom Swirly

-3

标签是 Git 中的基本构建块;分支不是。Git 执行检查以确保标签保持恒定,一旦指向提交就永远不会更改。另一方面,分支只是对提交的引用或指针,可以自由地更新以指向不同的提交。


11
"标签是Git中的基本构件;分支则不是。没有任何意义的“基本构件”可以正确地描述这个语句。特别是,在Git中如果没有分支就无法进行有用的工作,但是许多简单的Git项目根本没有任何标签。" - Tom Swirly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接