• Git理解


    工作原理 / 流程:

    1:git init初始化

      主要目录说明

      objects-存储对象的目录,本地仓库,git中对象分为三种:commit对象,tree对象(多叉树),blob对象;文件都是blob对象,二进制存储;

      Refs-存储指向branch的最近一次commit对象的指针,也就是commit对象的sha-1值(就是hash值,sha-1是一种散列算法);

      HEAD文件-该文件表示当前本地签出的分支;

      Index文件-存储缓冲区(GitExtensions中的stage)的内容,内容包括它指向的文件的时间戳、文件名、sha1值等;(git三大区域:工作区,缓冲区,历史记录区)

    2:git add * 指定文件写入缓存区,生成Git对象

      在objects目录创建目录和文件

      git是一套内容寻址系统,它是怎样寻址的呢?

      Git从核心上来看不过是简单地存储键值对(key-value)(hashmap),大概结构如下:

      Key=sha-1(file header + file content)

      Value=压缩(file content)

      Key是一个40位字符的校验和,前2位作为子目录,后38位作为文件名保存在子目录下。

               

    3:git cat-file -t 58c9 查看object的类型

      其中58是目录,C9是文件名前两位(58c9也可替换为key(目录+文件名)), 此时返回blob

    4:git cat-file -p 58c9 查看文件内容

      返回文件内容信息,不包括文件名等其他信息

    5:git commit -m用于提交暂存区的文件;git commit -am用于提交跟踪过的文件

      git commit -am提交已跟踪过本地修改未执行add进入缓存区的文件=git add +git commit -m合并执行

           其中已跟踪并修改的文件产生新的object

      提交后Git仓库里面object的类型发生变化,增加了其它目录(tree commit两种类型)可用第3点执行新的目录和文件,一个是commit,一个是tree

      git cat-file -p 4caa查看tree类型的文件信息,从它储存的内容来看可以发现它储存了一个目录结构(类似于文件夹),以及每一个文件(或者子文件夹)的权限、类型、对应的身份证(SHA1值)、以及文件名。

      

      此时的Git仓库关系是tree-blob结构

       

       commit类型信息,它储存的是一个提交的信息,包括对应目录结构的快照tree的哈希值,上一个提交的哈希值  

                

       可以理解为commit是一次提交的根节点

      

      git add 在暂存区索引Index建立与blob object的链接关系

      git commit 根据索引区的链接信息创建commit-tree-blob的新链接关系,

      同时将版本指针指向新的链接关系,在commit记录上一版本的key

     6:分支信息储存-.git/refs/heads/master文件存储最新commit的key地址

                 

     7:Git的三个分区(工作目录、Index 索引区域、Git仓库)

      工作区:就是你在电脑里能看到的目录。

      版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库,由Git object记录着每一次提交的快照,以及链式结构记录的提交变更历史。

      暂存区:一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)这里面的代码会在下一次commit被提交到Git仓库。。

      

       

    常用命令:

      git log命令显示从最近到最远的显示日志

      git reset --hard HEAD^  回退到上一个版本,如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。那如果要回退到前100个版本的话,使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:git reset --hard HEAD~100 即可

      git reflog 查看提交记录版本号

      git reset --hard 版本号退到指定版本

      git checkout -- 文件名 把在工作区中的文件做的修改全部撤销(如果已commit则退回最后一个版本,如果add则从缓存区获取)

      查看分支:git branch

      创建分支:git branch name

      切换分支:git checkout name

      创建+切换分支:git checkout –b name

      合并某分支到当前分支:git merge name

      删除分支:git branch –d name

    git本地创建多个分支互不干扰

    https://www.cnblogs.com/BonnieWss/p/10711835.html

    参考资料

      https://mp.weixin.qq.com/s/UQKrAR3zsdTRz8nFiLk2uQ

      https://blog.csdn.net/Miracle_Yan/article/details/80224839

      https://mp.weixin.qq.com/s/f1nQvj6tX4asH4l3uer6mw

         https://mp.weixin.qq.com/s/IDChhMK_BR1dUJemOnwv9Q

  • 相关阅读:
    水调歌头·1024
    网页开发方式-从静态页面到服务端渲染
    完美融合 nextjs 和 antd
    commanderJs编写命令行工具(cli)
    [信息安全] 05 X.509 公钥证书的格式标准
    [Cake] 3. dotnet 本地工具 cake & dotnet format
    [计算机网络] 00 概述
    [Cake] 2. dotnet 全局工具 cake
    [解读REST] 0.REST 相关参考资料
    [OIDC in Action] 3. 基于OIDC(OpenID Connect)的SSO(添加Github OAuth 2.0的支持)
  • 原文地址:https://www.cnblogs.com/sun-null/p/12343184.html
Copyright © 2020-2023  润新知