长话短说...
据我所知,术语“分支”(Git 术语)可能指的是相关但不同的事物:
- 指向提交的非符号引用/指针,
- 此类引用的名称(例如“master”),
- 存储库提交 DAG 的子图,由此类引用所指向的提交可到达的所有提交组成。
然而,我发现这个术语显然指的是这三种可能的用法之外的东西(更多细节见下文)。在 Git 上下文中,我上面的列表中是否缺少术语“分支”的其他有效且明确的用法?
更多细节
使用 Git 大约一年后,我正在为 CS 学生准备一个简短的教程。我真的很想明确 Git 术语,以避免任何混乱。
当然,我已经使用 Git 分支有一段时间了;我很喜欢使用它们,并且发现 Git 分支模型很棒。然而,我仍然发现术语“分支”有问题且含糊不清,因为它似乎指的是至少两个不同的事物,具体取决于它使用的上下文......有时甚至在同一个教程/手册中。
用法 1:分支 = 提交的指针/引用
Pro Git 书(在3.1 - 什么是分支 http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is),显示下图后,
继续将分支定义为
只是一个指向这些提交之一的轻量级可移动指针。
据我所知,这也是 Git 手册页中“分支”的含义。
我对这个定义非常满意。我认为分支只是指向 DAG 中特定提交的引用,而分支的“尖端提交”是该引用指向的提交。到目前为止,一切都很好。可是等等...
用法 2:分支 = DAG 的子图
The Atlassian Git 教程 https://www.atlassian.com/git/tutorial/git-branches#!branch介绍分支如下:
一个分支代表一条独立的开发线。
我猜他们的意思是一串提交。让我完善这个想法......对我来说唯一有意义的解释是术语“分支”也可以指代存储库提交 DAG 的子图,由所考虑的提示提交可到达的所有提交组成.
然而,例如,Pro Git 书籍还包含以下图表(请参阅3.4 - 分支工作流程 http://git-scm.com/book/en/Git-Branching-Branching-Workflows),
这似乎与我的解释相矛盾,因为它似乎意味着只承诺C2
-C5
(not C1
)属于develop
分支,并且只提交C6
-C7
(not C1
-C5
)属于topic
分支。
我发现这种用法含糊不清,因为如果我在那个阶段绘制 DAG,而不知道分支引用过去指向哪里,并且不假设三个分支之间有任何层次结构,我会得到的只是
我还发现其他 Git 学习资源中的一些图表令人困惑。特别考虑以下内容(取自介绍视频)Lynda.com - Git 基本培训 http://www.lynda.com/Git-tutorials/Git-Essential-Training/100222-2.html):
在这里,提示master
is actually 534de
(and HEAD
指着master
),但是图中“master”标签的位置非常具有误导性。我不清楚在这种情况下该标签应该描述什么......
Edit: 我后来发现了这个Marc 博客上的优秀帖子 http://longair.net/blog/2009/04/16/git-fetch-and-merge/; the Branches部分呼应了我上面的言论。