git - git - 如何判断提交属于哪个分支?
问题描述
作为一个对 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 都可以从 master 分支访问?
是的,这正是它的意思。所有这些提交都是可访问的,因为提交C6
指向 2 个不同的提交:C5
和 C4
.
你如何处理图中发生的分支父系?这有关系吗?
提交C6
有两个父母。这意味着两个分支合并在一起。这就是你处理“分支亲子关系”的方式。具有多个父级的提交是用git merge
or git pull
(git fetch
后面是 a git merge
)创建的。
推荐阅读
- html - 是否可以将 Jekyll 中生成的集合页面中的数据传递给布局?
- java - 如何将 JComboBox 项目更改为整数
- python - 制作具有可变输入数量的网络
- java - 将字符串分成两个或三个单词的组
- machine-learning - 工资单检查的多项式回归
- hal - HIDL:VINTF 有什么用?
- python - Pandas dataframe.resample TypeError '仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但获得了 'RangeIndex' 的实例
- clojure - 在试剂应用程序中将打嗝转换为 html
- c# - HangFire 中的重复性工作到期
- c++ - 在 C++ 中使用 freopen 没有得到输出:-vs 代码显示