作为一个对 Git 相对陌生的人,我最近(终于!)明白了分支实际上只是指向特定提交的指针,有时候将“某个提交属于哪个分支”改为“哪些分支可以到达某个提交”可能更好一些。
例如,下面这张图来自官方 Git 文档:
在这张图片中,我本能地认为提交 C4 属于分支 master,而提交 C3 和 C5 属于 iss53。但是 C0 到 C2 呢?它们会属于两个分支吗?还是说我必须说它们是可以通过分支 master 和 iss53 到达的?
当我将 iss53 合并到 master 中时,这就变得更加复杂了:
因为将分支 iss53 合并到 master 中,所以 C0 到 C2 是否比属于 iss53 更加属于 master?
如果我在合并后删除分支 iss53 呢?那么提交 C3 和 C5 会属于哪个分支?经过更多思考之后,似乎在合并后,提交 C4、C3 和 C5 在分支历史方面是“相等”的,我无法确定它们三个属于哪个分支,因为删除 iss53 后,没有任何信息表明 C4 比 C3 和 C5 更像任何历史分支。
我找到了这个答案,它说用“哪些分支可以到达这个提交”来思考会更好。但这是否意味着 C4、C3 和 C5 都可以从 master 分支到达?但是如何处理图中发生的分支父关系呢?那重要吗?
例如,下面这张图来自官方 Git 文档:
在这张图片中,我本能地认为提交 C4 属于分支 master,而提交 C3 和 C5 属于 iss53。但是 C0 到 C2 呢?它们会属于两个分支吗?还是说我必须说它们是可以通过分支 master 和 iss53 到达的?
当我将 iss53 合并到 master 中时,这就变得更加复杂了:
因为将分支 iss53 合并到 master 中,所以 C0 到 C2 是否比属于 iss53 更加属于 master?
如果我在合并后删除分支 iss53 呢?那么提交 C3 和 C5 会属于哪个分支?经过更多思考之后,似乎在合并后,提交 C4、C3 和 C5 在分支历史方面是“相等”的,我无法确定它们三个属于哪个分支,因为删除 iss53 后,没有任何信息表明 C4 比 C3 和 C5 更像任何历史分支。
我找到了这个答案,它说用“哪些分支可以到达这个提交”来思考会更好。但这是否意味着 C4、C3 和 C5 都可以从 master 分支到达?但是如何处理图中发生的分支父关系呢?那重要吗?
另外,我提供的答案中还说明了可能有一些情况下某个提交可能无法被任何分支所引用,这种情况是如何发生的?它会带来哪些影响?
但我的主要问题仍然是:如何将提交与分支相关联?
P.S. 由此带来的一个侧面或离题问题是:一个提交是否可以有超过两个父提交?