• 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

    作者: MilesGO

    出处:https://www.cnblogs.com/milesgo517/p/10993188.html

    版权:本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。

     
     
  • 相关阅读:
    简介&目录
    Lucas 定理
    扩展欧几里得算法(exgcd)
    【做题记录】CF23B Party
    【做题记录】CF1375D Replace by MEX
    【做题记录】CF194B Square
    SPFA
    dijkstra
    CSP-J&S 2020 游记
    中国剩余定理(CRT)
  • 原文地址:https://www.cnblogs.com/feng9exe/p/12781854.html
Copyright © 2020-2023  润新知