什么是Git主题分支?

153

什么是git主题分支?它与普通分支有何不同?是否存在非主题分支?

4个回答

125

主题分支通常是您本地创建的轻量级分支,名称有意义且适合您。它们是您可能为修复错误或功能而进行工作的地方(也称为功能分支),这需要一些时间来完成。

另一种分支是“远程分支”或“远程跟踪分支”。这种类型的分支跟随其他人的工作开发,并存储在您自己的仓库中。您定期更新此分支(使用git fetch)以跟踪其他地方正在发生的情况。当您准备好跟上其他人的更改时,您将使用git pull既获取又合并。

我还见过另一种分支,它本质上是同一代码库中完全独立的文件树。例如,Git 代码库本身 包含名为manhtml的头部,其包含与 master 分支完全不同的内容。我不知道通常称这些类型的分支。


6
我正在寻找如何创建两个没有共同祖先提交的分支,并发现了这篇文章:http://madduck.net/blog/2007.07.11:creating-a-git-branch-without-ancestry/。 - Nicolas
1
关于独立的树,我认为它们有时被称为孤立分支,类似于Github建议您手动创建Github页面。 - max
2
为什么你说一个主题分支必须是本地的呢?没有理由认为你不想推送一个主题分支。同样地,其他开发者可能会创建自己的主题分支,而你可能想要拉取它们。这个答案似乎混淆了分支的两个完全不相关的属性:一个分支是否本地与它是否是主题分支毫无关系。 - Jean-Paul Calderone
@Jean-PaulCalderone:我不认为我说过主题分支必须是本地的。当然,如果有多个开发人员在上面工作,你可以远程跟踪一个主题分支。 - Greg Hewgill
2
我认为答案暗示了这一点。为什么 "... that you create locally ..." 和 "... have a name that is meaningful to you." 是“主题分支”的重要组成部分?你回答的第一句话强烈暗示了这些是主题分支的重要特征,但它们实际上与分支的“主题性”或否毫不相关。你描述“远程分支”的段落强化了“在本地创建”的主题分支的重要性。我建议重新聚焦这个答案,以减弱这些无关的分支特征。 - Jean-Paul Calderone
显示剩余2条评论

91

这不是一个技术术语;它只是指创建一个分支来实现特定功能或修复漏洞。 "主题" 实际上是创建分支的原因。


3
是的,与个人分支相对应,你会有分支:Bob、Alice、Mat等。 - webmat
4
所以主题分支和特性分支是同一件事情,对吗? - Betlista
1
@Betlista 多多少少,是的。 - mipadi
1
我猜这是一个更通用的术语,用于表示功能分支。 "功能"分支可以是一个功能、修复bug、实验或其他可能的东西。我猜这是为了引入一个新的名称来代替以前被称为“功能分支”的任意分支,这些分支可能实际上并不是“功能”,以避免混淆。然而,显然它已经造成了一些混淆! - drkvogel

33

https://github.com/dchelimsky/rspec/wiki/Topic-Branches很好地解释了以下内容:

“主题”分支是您在处理单个“主题”(例如缺陷修复、新功能或实验性想法)时使用的单独分支。建议使用主题分支代替直接在“主分支”上进行工作,因为:

{...访问链接...}

因此,出于所有这些原因,即使准备提交简单的单次提交错误修复等贡献,也建议使用主题分支。

此示例还提供了示例。 这让我想到,这可能是大多数商店已经在做的事情。我对“这不是技术术语”点赞,因为我觉得这正中要害。


4
看起来最突出和重要的分支类型应该是主要公开可用仓库上的发布分支,对吗?
对于你来说可能是这样,但这与Git无关,它由用户和用户之间的协议决定工作流程、分支用途、何时提交、不同仓库用途等。大多数版本控制系统(特别是集中式的)规定或强制执行特定的工作流程以及使用分支的合理性。Git(以及在某种程度上大多数分布式版本控制系统)认为这些都是由用户选择的,因此并不会在技术上强制执行。
这是我学习Git时感到困难的原因之一。Oliver Steele从用户的角度解释了这一点,写了提交策略

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