我正在学习Git并阅读Pro Git书籍。这本书中有时会使用"分支尖端"这个术语,在Stack Overflow上也会用到,但我找不到它的意思。
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真正是什么以及它如何工作,而不是在头脑中编造一些虚假的几何图形。
因此,总之,不存在“分支尖端”这样的东西,因为分支只是一个提交,而一个提交不能有尖端。书中所谓的“分支尖端”的意思实际上是这个分支——由分支名称指向的一个提交。这是一种“由分支名称指向的提交”的快捷方式。但这是一个糟糕的快捷方式,我强烈建议不要使用它。
HEAD
想象成硬盘的磁头,或唱片机上的唱针:HEAD
是你当前检出并读取数据状态的提交。当你检出一个分支时,HEAD
就在该分支的末端。 - Benjamin R