长话短说...
就我所知,在Git术语中,“分支”一词可能指相关但不同的事物:
- 指向提交的非符号引用/指针,
- 此类引用的名称(例如“master”),
- 仓库提交DAG的子图,由指向此类引用的提交可达的所有提交组成。
然而,我看到这个术语似乎被用来指代除了这三种可能用法之外的其他东西(下面有更多细节)。在Git上下文中,是否还有其他有效和明确的“分支”术语用法,我的上述列表中没有包含?
更多细节
使用Git大约一年后,我正在为计算机科学学生准备一个简短的教程。我真的想弄清楚Git术语,以避免任何混淆。
当然,我已经使用Git分支一段时间了;我习惯使用它们,并且发现Git分支模型很棒。然而,我仍然认为“分支”这个术语存在问题和歧义,因为它似乎根据使用它的上下文而至少指代两种不同的东西... 有时甚至在同一个教程/手册中。
用法 1:分支 = 指向提交的指针/引用
在《Pro Git》书中(在3.1 - 分支是什么一节中),展示了以下图表:
继续定义一个分支为:
仅是一个轻量级的可移动指针,指向这些提交中的一个。
据我所知,在Git手册中,“分支”也有这个意义。
我对此定义感到非常舒适。我认为一个分支只是一个引用,指向DAG中的特定提交,“分支的尖端提交”是该引用指向的提交。到目前为止一切都好。但等等......
用法2:分支= DAG的子图
Atlassian Git教程如下介绍分支:
分支代表独立的开发线。
他们的意思是一系列提交。让我完善这个想法...唯一有意义的解释是,术语“分支”也可以指代由所有可从考虑的尖端提交到达的提交组成的存储库提交DAG的子图。
然而,例如《Pro Git》书中还包含以下图表(参见3.4 - 分支工作流程),
这似乎与我的解释相矛盾,因为它似乎意味着只有提交C2
-C5
(而非 C1
)属于 develop
分支,只有提交 C6
-C7
(而非 C1
-C5
)属于 topic
分支。我认为这种用法含糊不清,如果我在那个阶段绘制DAG,不知道分支引用过去指向哪里,也没有任何假设三个分支之间的层次关系,我得到的只是:
我也发现其他Git学习资源中的一些图表令人困惑。特别是考虑以下这个(摘自Lynda.com - Git Essential Training的介绍视频):
这里,master
的提示实际上是 534de (而 HEAD
指向 master
),但图表上的 "master" 标签位置非常误导。在这种情况下,该标签所描述的内容对我来说不清楚...编辑:我后来发现了 Marc 博客上这篇优秀的文章;其中的 分支 部分与我上面的评论相似。