我们所说的“分支”是什么意思?

长话短说…

据我所知,术语“分支”(用Git的说法)可能指的是相关但不同的东西:

  1. 一个非符号引用/指向提交的指针,
  2. 这样的参考名称(例如“主”),
  3. 存储库的提交DAG的子图由所有提交可达的提交组成,这些提交由这样的引用所指向的提交。

但是,我已经看到这个术语明显地指的是除了这三种可能的用法之外(下面更详细的介绍)。 在一个Git的上下文中,是否还有其他有效的和明确的术语“分支”的用法,我的上面的列表丢失?

更多细节

使用Git大约一年后,我正在为CS学生准备一个简短的教程。 我真的想确定一下Git的术语,以避免混淆。

当然,我一直在使用Git分支, 我很舒服地使用它们,并findGit分支模型真棒。 然而,我仍然觉得术语“分支”是有问题的和模棱两可的,因为它似乎至less指两种不同的东西,这取决于它使用的上下文…有时甚至在相同的教程/手册中。

用法1:分支=提交的指针/引用

Pro Git书(在3.1–分支是什么 )在显示下面的图之后,

在这里输入图像描述

继续定义一个分支

只是一个轻量级的可移动指针到这些提交之一。

据我所知,这也是“分支”在Git手册页中的含义。

我对这个定义很满意。 我认为分支只是指向DAG中特定提交的引用,分支的“提交提交”是该引用指向的提交。 到现在为止还挺好。 可是等等…

用法2:分支= DAG的子图

Atlassian Git教程介绍分支如下:

分支代表独立的发展路线。

他们的意思是,我想是一串提交。 让我细化这个想法……唯一对我有意义的解释是,术语“分支”也可以指存储库提交DAG子图,它由所考虑的提示提交可达到的所有提交组成

但是,Pro Git书籍也包含以下图表(参见3.4 – 分支工作stream程 ),

在这里输入图像描述

这似乎与我的解释矛盾,因为它似乎暗示只有提交C2C5 (不是C1 )属于develop分支,而只提交C6C7 (不是C1C5 )属于topic分支。

我觉得这个用法是模棱两可的,因为如果我在这个阶段绘制DAG,而不知道过去分支引用指向的位置,并且没有任何假定三个分支之间的任何层次结构,我会得到的是

在这里输入图像描述

其他Git学习资源中的一些图表也令人困惑。 特别考虑以下内容(来自Lynda.com的简介video- Git基本培训 ):

在这里输入图像描述

在这里, master 实际上是 534deHEAD指向master ),但图中“主控”标签的位置非常具有误导性。 在这种情况下,这个标签应该描述的是我不清楚的…

编辑 :我在Marc的博客上发现了这篇优秀的文章 。 分支部分回应了我上面的评论。

你是对的。

我们可以通过分离“本地”和“远程”分支标签来进一步拆分项目1:本地分支(本地标签)是启动(内部许多前端命令隐藏这个)的名称,这也称为“远程跟踪分支” – 启动refs/remotes/然后有一个更多的path组件命名特定的远程命名分支的部分之前。

比如说,你对refs/remotes/origin/master毫无疑问,但是如果你有一个远程命名的bob你可能也有跟踪Bob的hacks/feep refs/remotes/bob/hacks/feep hacks/feep

一个本地分支名称refs/heads/ branch具有显着的特点, git checkout会默认把你放在那个分支上,把这个名字写入特殊的HEAD引用。 一旦你这样设置,新的提交(由git commitgit mergegit cherry-pick等创build)会导致新提交的SHA-1被写入到分支文件中。 (新的提交作为其父母,或其父母之一,旧的分支。)

我试图使用像“分支提示”这样的术语来具体指明一个分支名称如refs/heads/master points,“分支名称”或“本地分支名称”来引用名称本身的提交(是否通过refs/heads/前缀refs/heads/ or not),而且 – 我认为这是最不成功的 – “分支结构”来指代DAG子集。 但是,给定一个像这样的分叉和合并的DAG:

  o--o / \ ...-o--o o--o-... \ / o--o 

我有时想把这个小的苯环状物体的一个或另一个称为“分支”,对此我没有什么好的名词。

(顺便说一句,如果你是一个拓扑学家,Atlassian图也可以线性绘制的事实不会打扰你,但是,正如这个老玩笑一样,拓扑学家不断尝试从他们的甜甜圈中喝出来,只是一个花托。)

在第二种情况下,我们的意思是“从分支指向的提交可达的提交”。

在Pro Git示例中,假定topic分支指向提交C7 ,则该分支包含提交C7C6C5C4C3C2C1 。 在Git中没有其他的“在”分支上的提交概念,并且您可以线性地重新绘制DAG。

Lynda.com图很不清楚,我怀疑你是对的,这是误导。