git引用初识(HEAD分支tag)

Posted feng9exe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git引用初识(HEAD分支tag)相关的知识,希望对你有一定的参考价值。

git将引用保存在文件中,原理很简单

引用原理#

引用指的是对提交记录的引用
提交记录哈希值唯一标识
每个引用用一个文件表示,文件中保存其引用的提交记录的哈希值

引用分类#

  • 分支
    • 可变, 在不同的时刻可以指向不同的提交记录
    • 本地分支
      • 对应.git/refs/heads/目录中的文件
      • 每个本地仓库有多个本地分支
    • 远程分支
      • 对应.git/refs/remotes/<远端仓库名>/目录中的文件
      • 每个本地仓库可以对应多个远端仓库, 同时每个远端仓库可以有多个远端分支
  • tag
    • 对应.git/refs/tags/目录中的文件
    • 不可变, 除非删除后重新创建, 否则总是指向特定的提交记录
    • 每个git仓库可以有多个tag
  • HEAD
    • 对应.git/HEAD文件
    • 可变
      • 通常指向某个本地分支,即引用的引用
      • 也可以直接指向某个提交记录,称为HEAD detached, 即分离头指针状态
      • 也可以指向tag,git将这种情况也处理成HEAD detached
      • 也可以指向远端分支, git将这种情况也处理成HEAD detached
    • 每个git仓库只有一个HEAD
    • 表示当前工作区检出的文件(或者说文件在修改之前)是属于哪个提交记录
    • git checkout 指令,就是在改变HEAD的指向
      • git checkout 本地分支名
      • git checkout 提交记录哈希值, detached
      • git checkout 远端分支名, detached
      • git checkout tag名, detached

实验#

Copy
$ 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

Copy
$ git checkout milestone
Note: checking out ‘milestone‘.
You are in ‘detached HEAD‘ state. 
HEAD is now at eecc5fe milestone

$ cat .git/refs/tags/milestone
eecc5fe060e5b86957f931fd931beae4f206d4eb

$ cat .git/HEAD
eecc5fe060e5b86957f931fd931beae4f206d4eb

checkout tag milestone后,HEAD指向eecc5f, detached HEAD

以上是关于git引用初识(HEAD分支tag)的主要内容,如果未能解决你的问题,请参考以下文章

[git]继续学习的第二天

git命令行

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段

重学Git高级命令篇

04_Git杀手锏(分支)