hpy*_*hpy 2 git version-control git-branch
作为一个对 Git 比较陌生的人,我最近(终于!)明白了一个分支实际上只是一个指向特定提交的指针,有时将“提交属于哪个分支”重新表述为“来自哪个分支”可能会更好分支是一个提交可达”。
比如下图来自Git官方文档:
在这张图片中,我会直觉地认为提交C4“属于”分支master,提交C3并C5属于iss53. 但是C0通过C2呢?他们会属于两个分支吗?或者,我必须说,他们是“可达”的分支机构master和iss53?
一旦我合并iss53到master:
由于分支iss53已合并到master,这是否使提交C0通过C2属于master“更多” iss53?
如果我在合并后删除分支iss53怎么办?哪个分支将提交C3并C5属于?仔细想了想,似乎在合并之后,commits C4, C3, 和C5就分支历史而言是“平等的”,我无法分辨他们三个属于哪个分支。这是因为删除后iss53,似乎没有要任何信息是否C4属于任何历史分支任何超过C3和C5。
我找到了这个答案,它说最好根据“可以从哪些分支到达此提交”来考虑这一点。但这是否意味着C4、C3和C5都可以从master分支访问???但是您如何处理图中发生的分支出身呢?那有关系吗?
另外,我联系到的答案说,有可能在那里提交不能被任何分支到达的情况下,如何能是怎样呢?它的含义是什么?
但我的主要问题仍然是:如何将提交与分支相关联?
PS 源于这篇文章的一个侧面/题外问题是:提交可以有两个以上的父母吗?
提交不属于一个分支。没有所有权。分支是指向提交的指针。每个提交都有一个或多个父提交。当多个分支合并在一起时,追溯分支的历史不仅仅涉及一条直线。您需要重新调整提交和分支的视图。
提交存在于许多分支中。
提交也可以根本不存在于任何分支中。
从概念上讲,Git 存储库只是一个大链表,其中每个节点至少指向另一个节点。“分支”只是指向其中一个节点的标记。Git 中的节点称为提交。在 Git 中删除分支只会删除指向提交的指针,但不会删除提交对象本身。你可以恢复你不小心删除的分支,因为提交的数据库被安排为一个链表,一个分支只是一个指针——一个书签,如果你愿意的话。
但这是否意味着 C4、C3 和 C5 都可以从主分支访问?
是的,这正是它的意思。所有这些提交都是可访问的,因为提交C6指向 2 个不同的提交:C5 和 C4.
你如何处理图中发生的分支血统?那有关系吗?
CommitC6有两个父母。这意味着两个分支合并在一起。这就是你处理“分支出身”的方式。与不止一个父级的提交是使用git mergeor git pull(git fetch后跟 a git merge)创建的。
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |