据我所知,术语"分支"(用Git的说法)可能指的是相关但不同的东西:
但是,我已经看到这个术语过去常常是指三种可能的用法以外的东西(下面有更多细节).在Git上下文中,我的列表中缺少的"分支"一词是否还有其他有效和明确的用法?
使用Git大约一年后,我正在为CS学生准备一个简短的教程.我真的想要确定Git术语,以避免任何混淆.
当然,我现在已经使用Git分支了一段时间; 我很习惯使用它们并且发现Git分支模型很棒.但是,我仍然发现术语"分支"有问题且含糊不清,因为它似乎至少引用了两个不同的东西,具体取决于它所使用的上下文...有时甚至在同一个教程/手册中.
Pro Git书(3.1中 - 分支是什么),在显示下图后,

继续将分支定义为
只是一个指向其中一个提交的轻量级可移动指针.
据我所知,这也是Git手册页中"分支"的含义.
我对这个定义非常满意.我认为分支只是指向DAG中特定提交的引用,而分支的"提示提交"是该引用指向的提交.到现在为止还挺好.可是等等...
该Atlassian的Git的教程介绍分支如下:
分支代表独立的发展路线.
我猜他们的意思是一串提交.让我改进一下这个想法......唯一对我有意义的解释是术语"分支"也可以指存储库的提交DAG的子图,该提交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),但图中的"主"标签的位置是非常误导.在这种情况下,该标签应该描述的是我不清楚的......
编辑:我已经 …
假设我有一系列本地git分支,如下所示:
master branch1 branch2
| | |
o----o----o----A----B----C----D
Run Code Online (Sandbox Code Playgroud)
我将上游更改引入主分支:
branch1 branch2
| |
A----B----C----D
/
o----o----o----o
|
master
Run Code Online (Sandbox Code Playgroud)
现在我改变branch1,给我这个:
branch2
|
A----B----C----D
/
o----o----o----o----A'---B'
| |
master branch1
Run Code Online (Sandbox Code Playgroud)
请注意,由于rebase branch1,提交A和B已被重写为A'和B'.
这是我的问题:现在我想要rebase branch2.明显的语法是git rebase branch1 branch2,但这绝对不起作用.我想要它做的只是在branch1之上重新应用C和D,而是尝试协调A和A'并且它认为它们是冲突的.
这确实有效:
git rebase --onto branch1 branch2^^ branch2
Run Code Online (Sandbox Code Playgroud)
这假设我知道branch2正好超过前一个branch1 ref的2次提交.
既然git rebase --onto有效,是否有一个1行的git命令会在一个新重定位的branch1之上重新绑定branch2,这样我就不必知道究竟有多少提交是branch2的一部分?(我想为中间参数指定一些魔术引用而不是branch2 ^^.)
还是有其他方法我忽略了?
我最感兴趣的是一个可以很好地扩展到极端情况的解决方案,而不仅仅是两个分支 - 假设我有更多的东西,比如5个本地分支,彼此链接在一起,我想将所有这些分开.
在处理我的功能分支时,我不断地对它们进行重新排序和压缩,git rebase -i以保持我的历史记录的更清晰版本。有时我会开发多个相互依赖的功能(我团队的规则是使 PR 尽可能小,因此较大功能的一个原子块通常会成为其自己的功能分支)。由于此工作流程,我通常会在重新设置分支基础后手动重新指向分支。有没有办法自动将这些指针移动到它们应该着陆的位置?
例如,在此图中:
5bab4818e (HEAD -> cell-toggle-comp) Added cell-toggle component
d55cab881 (toggle-comp) Toggle: Added honey traceability comment
4240f0ac3 Made Toggle a named export and replaced references to obsolete <ui> alias
90a0b2452 Refactored Switch instances to toggle
e15c758a0 Updated Switch component to latest specs (and renamed things to match design lingo)
d53090e93 (fix-switch-reference) Fixed Switch reference that was being imported from React Native instead of src/components
4a214cb72 (cell-text-selection-comp) Added CellTextSelection ui component
cef3b5716 (origin/master, origin/HEAD, master) …Run Code Online (Sandbox Code Playgroud)