当前位置: 首页 > news >正文

[Git][认识Git]详细讲解

目录

  • 1.什么是仓库?
  • 2.认识工作区、暂存区、版本库
  • 3.认识 .git
    • 1.index
    • 2.HEAD && master
    • 3.objects
    • 4.总结


1.什么是仓库?

  • 仓库:进⾏版本控制的⼀个⽂件⽬录

2.认识工作区、暂存区、版本库

  • 工作区:在电脑上写代码或⽂件的⽬录

  • 暂存区(stage/index):⼀般存放在.git目录下的index文件(.git/index)

    • 暂存区有时也叫作索引(index)
  • 版本库(仓库).git不算⼯作区,⽽是Git的版本库

    • 这个版本库⾥⾯的所有⽂件都可以被Git管理起来,每个⽂件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”
  • ⼯作区、暂存区和版本库之间的关系

    • 在创建Git版本库时,Git会⾃动创建⼀个唯⼀的master分⽀,以及指向master的⼀个指针叫HEAD
    • 当对⼯作区修改(新增、修改、删除)的⽂件执⾏git add命令时,暂存区⽬录树的⽂件索引会被更新
    • 当执⾏提交操作git commit时,master分⽀会做相应的更新
      • 可以简单理解为暂存区的⽬录树才会被真正写到版本库中
        请添加图片描述
  • 综上:通过新建或粘贴进⽬录的⽂件,并不能称之为向仓库中新增⽂件,⽽只是在⼯作区新增了⽂件,必须要通过使⽤git addgit commit命令才能将⽂件添加到仓库中进⾏管理

  • 是谁在维护版本呢?

    • objects对象库在维护,里面存放了很多git对象
    • 修改的工作区内容会写入对象库的一个新的git对象中
    • 每一个git对象,都描述了此次git add后所修改的内容

3.认识 .git

1.index

  • index暂存区git add后的内容都是添加到这里的

2.HEAD && master

  • HEAD:默认指向master分支的指针
    $ cat .git/HEAD
    ref: refs/heads/master
    
  • 默认的master分支,里面保存着最新的commit id
    $ cat .git/refs/heads/master
    d74fd33ce217d9d6aefab18c84a3c4fb542d293e
    

3.objects

  • objects为Git的对象库,⾥⾯包含了创建的各种版本的库对象及内容
  • 当执⾏git add时,暂存区的⽬录树被更新,同时⼯作区修改(或新增)的⽂件内容被写⼊到对象库中的⼀个新的对象中,位于".git/objects"⽬录下
    objects
    ├── 78
    │   └── c38e74ed7bad28f712b4b214fcc1f1dc2814b6
    ├── 7a
    │   └── 535a4f3e6dba8a8dbcea9d7e3ee3c395aeabf3
    ├── 84
    │   └── ef513c15700a4fc435dd6e6ac284a49d7901ac
    ├── 8a
    │   └── e26cc86d8c9213c406383181dad60050e15df6
    ├── 99
    │   └── a6aad83baf0a7fdb6cf394f11ccde7845bcb1d
    ├── d7
    │   └── 4fd33ce217d9d6aefab18c84a3c4fb542d293e
    ├── info
    └── pack
    
  • 查找object时要将commit id分成2部分,前2位是⽂件夹名称,后38位是⽂件名称
  • 查看版本库对象的内容git cat-file
    $ git cat-file -p d74fd33ce217d9d6aefab18c84a3c4fb542d293e
    tree 84ef513c15700a4fc435dd6e6ac284a49d7901ac
    parent 7a535a4f3e6dba8a8dbcea9d7e3ee3c395aeabf3
    author DieSnowK <23336666@qq.com> 1721717265 +0800
    committer DieSnowK <23336666@qq.com> 1721717265 +0800666.txt
    
  • 其中tree 84ef513c15700a4fc435dd6e6ac284a49d7901ac
    $ git cat-file -p 84ef513c15700a4fc435dd6e6ac284a49d7901ac
    100644 blob 99a6aad83baf0a7fdb6cf394f11ccde7845bcb1d    233.txt
    100644 blob 78c38e74ed7bad28f712b4b214fcc1f1dc2814b6    666.txt
    
  • 任意查看其中的一个文件,发现是对每个文件做的修改,被Git记录了下来
    $ git cat-file -p 99a6aad83baf0a7fdb6cf394f11ccde7845bcb1d
    SnowK
    

4.总结

  • index:暂存区,git add后会更新该内容
  • HEAD:默认指向master分⽀的⼀个指针
  • refs/heads/master:⽂件⾥保存当前master分⽀的最新commit id
  • objects:包含了创建的各种版本库对象及内容
    • 可以简单理解为存放了Git维护的所有修改

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【启明智显分享】适用于多功能养生壶、茶吧机的2.8寸触摸彩屏解决方案
  • uni-app封装组件实现下方滑动弹出模态框
  • NeRF学习——复现训练中的问题记录
  • 【全国大学生电子设计竞赛】2022年E题
  • TCP Analysis Flags 之 TCP Window Full
  • 解决 Vue 页面中地址栏参数变更不刷新的问题
  • react防抖和节流hooks封装
  • Hystrix 线程池策略时使用ThreadLocal
  • 【LeetCode】219.存在重复元素II
  • STM32卡死、跑飞如何调试确定问题
  • CMD运行指令
  • 鸿蒙系统开发【ASN.1密文转换】安全
  • 线程池工具类 Executors源代码详解
  • 基于Redis实现全局唯一id
  • 小试牛刀-Telebot区块链游戏机器人(TS升级)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 2017-08-04 前端日报
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Cookie 在前端中的实践
  • IDEA 插件开发入门教程
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • mysql_config not found
  • node学习系列之简单文件上传
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Spring核心 Bean的高级装配
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 关于Flux,Vuex,Redux的思考
  • 基于 Babel 的 npm 包最小化设置
  • 使用parted解决大于2T的磁盘分区
  • 我是如何设计 Upload 上传组件的
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 06-01 点餐小程序前台界面搭建
  • 《码出高效》学习笔记与书中错误记录
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​ArcGIS Pro 如何批量删除字段
  • ![CDATA[ ]] 是什么东东
  • (1)(1.11) SiK Radio v2(一)
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (python)数据结构---字典
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)计算机毕业设计ssm电影分享网站
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)Windows2003安全设置/维护
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Core 中的路径问题
  • .Net Redis的秒杀Dome和异步执行
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .Net接口调试与案例