zoukankan      html  css  js  c++  java
  • 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

    实验

    $ 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/refs/tags/milestone
    eecc5fe060e5b86957f931fd931beae4f206d4eb
    
    $ cat .git/HEAD
    eecc5fe060e5b86957f931fd931beae4f206d4eb
    

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

  • 相关阅读:
    (一)IOC 容器:【2】@ComponentScan 自动扫描组件&指定扫描规则
    (一)IOC 容器:【11】Aware 注入Spring底层组件
    (一)IOC 容器:【10】@Autowired 自动装配
    (一)IOC 容器:【3】@Scope 设置组件作用域
    (一)IOC 容器:【8】Bean组件的生命周期
    每日日报7月13日
    每日日报7月12日
    每日日报7月11日
    Prism中的WeakEventHandlerManager
    博客开通标记
  • 原文地址:https://www.cnblogs.com/milesgo517/p/10993188.html
Copyright © 2011-2022 走看看