Git中的“branch tip”是什么?

35

我正在学习Git并阅读Pro Git书籍。这本书中有时会使用"分支尖端"这个术语,在Stack Overflow上也会用到,但我找不到它的意思。

3个回答

52

分支尖是分支上的最后一个提交或最近的提交。基本上,它指向分支中最新的代码。

4
这些树枝的尖端有时被称为"branch heads"吗? - ScottyBlades
1
@ScottyBlades 不,这些概念是彼此独立的。将Git HEAD想象成硬盘的磁头,或唱片机上的唱针HEAD是你当前检出并读取数据状态的提交。当你检出一个分支时,HEAD该分支的末端。 - Benjamin R
“a branch”和“分支的最后一次提交”之间有什么区别吗? - AhmadYo

11

使用《Pro Git》 书中的一张图片来说明:

Git 中的一些分支

标记为master的分支顶端是提交C2,标记为hotfix的分支顶端是提交C4,而C3iss53分支的顶部。

Kevin 的回答是正确的,但对于初学者可能更容易理解。


16
说C2、C3和C4是名为masterhotfixiss53的分支的“分支末端”是否更加准确? - DavidRR
2
我认为对于初学者来说,你的回答可能会导致更多的困惑。你应该采纳@DavidRR的建议或者添加一些解释,比如“在上图中,masterhotfix等标签都指向相应分支的末端”。 - ToJo

3
在Git中并不存在所谓的“分支末端”。这是一种不幸的误解表达,从Git书籍(有时也包括Git文档)泄露到常用语中,但它是具有误导性的,应该避免使用。
问题在于,“分支末端”这样的短语会产生错误的信念,即Git中的“分支”具有扩展性。事实并非如此。在Git中,分支只是一个字符串名称,特别地,它是一个提交的名称。
换句话说,分支不像线条,而是像一个点。而错误的信念认为它像一条线,在Git用户的思维中引起了比其他任何问题都更多的误解。
因此,在这个图示中:
A <-- B <-- C <-- D (main)
       \
        X <-- Y <-- Z (mybranch)

如果认为mybranch在某种程度上是X、Y和Z,那是错误的。它不是。 mybranch只是Z(此时此刻),仅此而已。

X和Y的真相并不是它们“在”分支mybranch上,就像mybranch具有线条一样的扩展性,而是它们可以通过父级链从mybranch到达:Y是Z的父级,而Z“是”mybranch,而X是Y的父级。(这就是图表中向后指向箭头的意义。)

这也说明了将分支视为具有扩展性的整个想法的问题所在。毕竟,B和A也可以通过父级链从mybranch到达。你想声称它们也在分支mybranch上吗?当你开始使用这种直观但错误的分支概念时,你会遇到这种麻烦。

当然,你可以纠正自己,并说X和Y(以及Z)可以从mybranch到达,但不能从main到达——事实上,这是正确的,非常有用,并且Git实际上可以让你很容易地这样说。但出于这个原因,最好以诚实的方式思考Git真正是什么以及它如何工作,而不是在头脑中编造一些虚假的几何图形。


因此,总之,不存在“分支尖端”这样的东西,因为分支只是一个提交,而一个提交不能有尖端。书中所谓的“分支尖端”的意思实际上是这个分支——由分支名称指向的一个提交。这是一种“由分支名称指向的提交”的快捷方式。但这是一个糟糕的快捷方式,我强烈建议不要使用它。


我也曾经和你一样认为,但是我发现Git词汇表的解释有些不同(它说分支“head”是指向特定提交的那个)。你对此有什么看法?我认为Git官方网站没有严格定义这些术语,这让初学者感到困惑。 - starriet
1
请查看我的https://www.biteinteractive.com/picturing-git-conceptions-and-misconceptions/,了解更多我如何思考和谈论Git的内容。 - matt
我查了一下,有很多内容!感谢您的好文章 :) - starriet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接