我实际上是在尝试深入研究 Git 的核心概念。最近我对Git的HEAD指针感兴趣。
我知道 HEAD 是一个指向分支(间接指向提交)或直接指向提交的指针。如果我的理解是正确的,这就是附加 HEAD 和分离 HEAD 之间的区别。这个主题帮助我解决了关于这个主题的大部分问题:Git 中的 HEAD 是什么?
但是还有一个问题我没有找到答案。
如果我在分支 A 上并且签出到过去的提交,那么我在该提交上就有一个分离的 HEAD。如果我签出分支 B,则 HEAD 位于该分支的最后一次提交上。如果我返回分支 A,似乎 HEAD 仍在我之前到达的过去提交上。
所以我想知道:是否存在一个且唯一的 HEAD 指针来跟踪每个分支上的先前位置,或者是否存在多个分支的多个 HEAD 指针?
我在一个 Git 项目上进行了多次移动来了解其行为,并检查了多个 Stack Overflow 问题和网络上的文章,从理论上理解了 HEAD 的概念。但我没有找到我的问题的明确答案。
每个存储库只有一个
HEAD
符号引用。符号引用的目标存储在文件 .git/HEAD
中。 (只有一个文件和一行,所以只能有一个HEAD
)。
如果您此时已签出分支
master
,这就是它的样子:
$ cat .git/HEAD
ref: refs/heads/master
在detached HEAD状态下,它看起来像这样:
$ cat .git/HEAD
0123456789abcdef0123456789abcdef01234567