git将引用保存在文件中,原理很简单
引用指的是对提交记录的引用
提交记录用哈希值唯一标识
每个引用用一个文件表示,文件中保存其引用的提交记录的哈希值
不同的提交记录.git/refs/heads/目录中的文件本地仓库有多个本地分支.git/refs/remotes/<远端仓库名>/目录中的文件本地仓库可以对应多个远端仓库, 同时每个远端仓库可以有多个远端分支.git/refs/tags/目录中的文件特定的提交记录tag.git/HEAD文件本地分支,即引用的引用某个提交记录,称为HEAD detached, 即分离头指针状态tag,git将这种情况也处理成HEAD detached远端分支, git将这种情况也处理成HEAD detachedHEAD工作区检出的文件(或者说文件在修改之前)是属于哪个提交记录的git checkout 指令,就是在改变HEAD的指向
git checkout 本地分支名git checkout 提交记录哈希值, detachedgit checkout 远端分支名, detachedgit checkout tag名, detached$ git checkout master
Switched to branch 'master'
$ cat .git/HEAD
ref: refs/heads/master
$ cat .git/refs/heads/master
89d496d44f93d107a7eb404890cd15a14ba8845d
checkout master后, HEAD指向master, master指向89d496
$ git checkout milestone
Note: checking out 'milestone'.
You are in 'detached HEAD' state.
HEAD is now at eecc5fe milestone
$ cat .git/HEAD
eecc5fe060e5b86957f931fd931beae4f206d4eb
checkout tag milestone后,HEAD指向eecc5f, detached HEAD
原文:https://www.cnblogs.com/milesgo517/p/10993188.html