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

  • 相关阅读:
    $().css() 设计的原理
    js无缝滚动
    Git 与Github---新手上传经验(快速学习)
    NDK_MODULE_PATH造成Android版无法编译
    Cocos2d-x中子ccb动画无法正常播放的问题
    Android版CCLabelTTF在setstring时出现黑块
    在iOS平台使用libcurl
    CCScrollView上和按钮相关的两个bug
    Cocosbuilder中的颜色自动校准bug
    实用命令杂记
  • 原文地址:https://www.cnblogs.com/milesgo517/p/10993188.html
Copyright © 2011-2022 走看看