我有一些困难理解如何使用标签与分支在git。

我只是将当前版本的代码从cvs移到git,现在我将针对特定的特性处理该代码的一个子集。其他一些开发人员也将致力于此,但并不是我们团队中的所有开发人员都会关心此功能。我应该创建一个分支还是一个标签?在什么情况下我应该使用其中一种而不是另一种?


当前回答

我喜欢把分支看作你要去的地方,标签看作你去过的地方。

标记就像过去某个特定重要点的书签,比如版本发布。

而分支是项目前进的特定路径,因此分支标记会随着您一起前进。当你完成时,你合并/删除分支(即标记)。当然,在这一点上,您可以选择标记该提交。

其他回答

简单的答案是:

分支机构: 每次提交到存储库时,当前分支指针都会移动

but

标签:标签指向的提交没有改变,事实上标签是该提交的快照。

github上的Neovim:

V0.3是一个分支

v0.3.1……v0.3.4……是标签

Nightly和stable是标记,而不是分支

我喜欢把分支看作你要去的地方,标签看作你去过的地方。

标记就像过去某个特定重要点的书签,比如版本发布。

而分支是项目前进的特定路径,因此分支标记会随着您一起前进。当你完成时,你合并/删除分支(即标记)。当然,在这一点上,您可以选择标记该提交。

没有什么比喻是完美的,但是您可以将您的存储库想象成一本记录项目进展的书。

分支机构

你可以把分支想象成一个粘性书签:

全新的存储库只有其中一个(称为master main),它自动移动到您所编写的最新页面(考虑提交)。但是,你可以自由地创建和使用更多的书签,以便标记书中其他感兴趣的点,这样你就可以快速返回到它们。

此外,你总是可以将一个特定的书签移动到书的其他页面(例如,使用git-reset);兴趣点通常随时间变化。

Tags

你可以把标签看作章节标题。

它可能包含标题(考虑带注释的标签),也可能不包含。标签与分支相似但又不同,因为它标记了书中历史兴趣的点。为了保持它的历史特性,一旦你共享了一个标签(即把它推到一个共享的遥控器上),你就不应该把它移动到书中的其他地方。

最好的解释似乎是标签充当只读分支。您可以使用分支作为标记,但您可能会无意中使用新的提交更新它。只要标签存在,它们就保证指向相同的提交。