【Git 学习笔记】Ch1.1 Git 简介 + Ch1.2 Git 对象

news2024/11/16 3:19:49

还是绪个言吧

今天整理 GitHub 仓库,无意间翻到了几年前自学 Git 的笔记。要论知识的稳定性,Git 应该能挤进前三——只要仓库还在,理论上当时的所有开发细节都可以追溯出来。正好过段时间会用到 Git,现在整理出来就当温故知新了。
当时找的学习资料是 Packt 出版社于 2018 年出版的一本电子书 Git Version Control Cookbook, Second Edition,直译过来就是《Git 版本控制手册》,作者有两位,一位来自丹麦,另一位来自意大利。选这本书来啃的原因也很简单:重实操,上手快,最关键还免费(同事转发的)。反正比看 Git 文档强多了。需要本书电子版的朋友可以在评论区给我留言。
P.S. 示例仓库点这里:GitHub

第一章 浏览 Git

相关主题:

  • Git 对象模型
  • Git 的三个阶段(stages)
  • 查看有序无环图 (DAG)
  • 提炼已修复事项
  • 获取变动文件列表
  • 使用 gitk 查看提交历史
  • 在历史记录中查找提交版本
  • 在历史代码中搜索信息

1.1 简介

传统版本管理系统:记录初始文件,以及后续变更。

传统版本管理系统

Git:记录所有文件的快照。

Git solution

Git 的数据模型:

Git data model

commit 对象指向 根节点树 root tree,根节点树又指向各子树(subtrees)与文件(files

分支和标签指向 commit 对象,而 HEAD 对象指向当前签出的分支 branch。因此对于每一个版本,其指向的根节点树 都是相同的

1.2 Git 对象

Git 对象是按键值对的形式存储。这个 ,用的是该对象的 SHA-1 哈希值,外加一些额外属性(如大小)。

Git 共有四种对象类型:

  • 文件 Files(在 Git 语境下也称 二进制大对象 blob)
  • 目录 Directories(在 Git 语境下也称
  • 版本 Commits
  • 标签 Tags

HEAD 是一个特殊的指针,指向当前签出的 branch 分支。

查看并打印 HEAD 标签指向的 commit 对象:

$ git cat-file -p HEAD

由于 HEAD 指向 master(现在叫 main)分支,master 分支又指向最近一次提交的版本 commit

1.2.1. tree 对象

用同样的方式查看 tree:(SHA-1

$ git cat-file -p 34fa038544bcd9aed660c08320214bafff94150b

或使用 <rev>^<type> 式引用:

# on Linux
$ git cat-file -p HEAD^{tree}
# on Windows
PS> git cat-file -p 'HEAD^{tree}'

注:<rev>^<type> 返回从 rev 递归查找到的第一个 type 型对象。

1.2.2. blob 对象

用该命令继续查看 blob 对象:(使用 SHA-1

$ git cat-file -p 92f046f17079aa82c924a9acf28d623fcb6ca727

这里的 -ppretty print,格式化输出。常用的选项还有:

  • -s: 显示对象大小(size)
  • -t: 显示对象类型(type)
  • -e: 检查是否存在(exist),不存在则报错,否则返回状态0(无返回)

1.2.3. branch 对象

该命令也可以作用于 master 分支:(现在默认为 main 分支)

$ git cat-file -p master

此外,在 .git 文件夹内也能查看 master 分支指向的 commit 的 ID,使用 cat 命令:

$ cat .git/refs/heads/master
# 2aa0ed57af1e4e35596616e7beee758e96b5e88c

要验证该结果是否为最新的版本,使用 git log -1

git log -1

查看 HEAD:(现在默认叫 main 分支)

$ cat .git/HEAD
# ref: refs/heads/master

由此可见,branch 分支只是一个指向 commit 对象的指针。

1.2.4. tag 对象

标签有三类:

  • 轻量标签
  • 注解标签
  • 签名标签

查看注解标签,使用 git tag

$ git tag
v0.1
v1.0

进一步查看标签 v1.0

$ git cat-file -p v1.0

在这里插入图片描述

可见,标签由以下部分组成:

  1. 对象(object):此处即 master 分支的最新 commit
  2. 类型(type):为 commit 型(commitsblobstrees 都可以添加标签)
  3. 标签名(tag name):v1.0
  4. 贴标签人(tagger)及时间戳(timestamp):John Doe <john.doe@example.com> 1526017989 +0200
  5. 标签注释内容(tag message):We got the hello world C program merged, let's call that a release 1.0

还可以通过使用命令 git hash-object 重散列(rehashing)来验证 git cat-file 的结果;例如,验证 HEAD 指向的 commit

$ git cat-file -p HEAD | git hash-object -t commit --stdin
# 2aa0ed57af1e4e35596616e7beee758e96b5e88c

该结果可以用 git log 作对比:

$ git log -1 | grep commit
# commit 2aa0ed57af1e4e35596616e7beee758e96b5e88c

命令 git cat-file -p 虽然少见,但查看对象信息、了解各对象的构成情况却很方便。除了这个命令外,查看一个 tree 对象也可以使用 git ls-treegit show,只是结果显示的方式不同罢了:

$ git cat-file -p HEAD^{tree}
100644 blob f21dc2804e888fee6014d7e5b1ceee533b222c15    README.md
040000 tree abc267d04fb803760b75be7e665d3d69eeed32f8    a_sub_directory
100644 blob b50f80ac4d0a36780f9c0636f43472962154a11a    another-file.txt
100644 blob 92f046f17079aa82c924a9acf28d623fcb6ca727    cat-me.txt
100644 blob bb2fe940924c65b4a1cefcbdbe88c74d39eb23cd    hello_world.c
$ git ls-tree HEAD^{tree}
100644 blob f21dc2804e888fee6014d7e5b1ceee533b222c15    README.md
040000 tree abc267d04fb803760b75be7e665d3d69eeed32f8    a_sub_directory
100644 blob b50f80ac4d0a36780f9c0636f43472962154a11a    another-file.txt
100644 blob 92f046f17079aa82c924a9acf28d623fcb6ca727    cat-me.txt
100644 blob bb2fe940924c65b4a1cefcbdbe88c74d39eb23cd    hello_world.c
$ git show HEAD^{tree}
tree HEAD^{tree}

README.md
a_sub_directory/
another-file.txt
cat-me.txt
hello_world.c

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1883431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python机器学习】模型评估与改进——简单的网格搜索

为了提升模型的泛化性能&#xff0c;我们可以通过调参来实现。 在尝试调参之前&#xff0c;重要的是理解参数的含义&#xff0c;找到一个模型的重要参数&#xff08;提供最佳泛化性能的参数&#xff09;的取值是一项棘手的任务&#xff0c;但对于几乎所有模型和数据集来说都是…

详细讲解 Keil Pack Installer,以及通过 Keil 官网获取 Pack

前言 大家好&#xff0c;我是梁国庆。 收到粉丝留言&#xff0c;说 Keil 安装 Pack 不太明白&#xff0c;可不可以详细演示一下&#xff1f; 当然可以有&#xff0c;直接视频&#xff0b;文章全部安排&#xff0c;我就是宠粉。 PS&#xff1a;第一次录视频有些紧张&#xff…

[leetcode]longest-arithmetic-subsequence-of-given-difference. 最长定差子序列

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int longestSubsequence(vector<int> &arr, int difference) {int ans 0;unordered_map<int, int> dp;for (int v: arr) {dp[v] dp[v - difference] 1;ans max(ans, dp[v]);}return ans…

朋友圈自由松弛感文案

“零碎的岛屿会找到海” “去发光而不是被照亮” “一没病&#xff0c;二没灾&#xff0c;小小日子&#xff0c;悠哉悠哉。” “我深知这是我一个人的困局” “山鬼不识字&#xff0c;西风不动情” “没有销声匿迹&#xff0c;我在热爱生活” “都是风景&#xff0c;幸会…

仓库管理系统24--统计报表

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现 1、引用LiveCharts 2、创建LiveChartViewModel using GalaSoft.MvvmLight; using LiveCharts.Wpf; using LiveCharts; using Sy…

mybatis实现多表查询

mybatis高级查询【掌握】 1、准备工作 【1】包结构 创建java项目&#xff0c;导入jar包和log4j日志配置文件以及连接数据库的配置文件&#xff1b; 【2】导入SQL脚本 运行资料中的sql脚本&#xff1a;mybatis.sql 【3】创建实体来包&#xff0c;导入资料中的pojo 【4】User…

PCL 基于点云RGB颜色的区域生长算法

RGB颜色的区域生长算法 一、概述1.1 算法定义1.2 算法特点1.3 算法实现二、代码示例三、运行结果🙋 结果预览 一、概述 1.1 算法定义 点云RGB区域生长算法: 是一个基于RGB颜色信息的区域生长算法,用于点云分割。该算法利用了点云中相邻点之间的颜色相似性来将点云分割成…

SQLAlchemy(alembic)和Flask-SQLAlchemy入门教程

SQLAlchemy 是 Python 生态中最流行的 ORM 类库&#xff0c;alembic 用来做 OMR 模型与数据库的迁移与映射&#xff0c;Flask-SQLAlchemy 是 Flask 的扩展&#xff0c;可为应用程序添加对 SQLAlchemy 的支持&#xff0c;简化 SQLAlchemy 与 Flask 的使用。 一.SQLAlchemy 和 a…

鸿蒙本地签名不匹配问题

连接鸿蒙手机运行项目报如下错误 这是由于本地签名和鸿蒙设备签名不匹配导致的&#xff0c;需要注释掉如下代码&#xff0c;选择file project 自动签名 勾选auto选项&#xff0c;会在build-profile.json5中生成一个签名&#xff0c;然后运行就ok了~

商汤上海AI实验室联合发布:自动驾驶全栈式高精度标定工具箱(含车、IMU、相机、激光雷达等的标定)

前言 在自动驾驶技术飞速发展的今天&#xff0c;传感器的精确标定对于确保系统性能至关重要。SensorsCalibration&#xff0c;一个专为自动驾驶车辆设计的标定工具箱&#xff0c;提供了一套全面的解决方案&#xff0c;用于校准包括IMU、激光雷达、摄像头和雷达在内的多种传感器…

探索智慧校园人事系统,了解人事合同功能的核心优势

智慧校园人事系统中的人事合同管理功能&#xff0c;是一个高度集成且自动化的模块&#xff0c;专注于优化合同的全生命周期管理&#xff0c;从合同创建、审批、签署到存档及续签提醒&#xff0c;旨在提升人事管理工作的规范性与效率&#xff0c;同时保障学校的法律合规性。 在智…

ARP 原理详解 一

ARP 原理 ARP&#xff08;Address Resolution Protocol&#xff09;地址解析协议&#xff0c;是根据 IP 地址获取物理地址的一个 TCP/IP 协议。 OSI 网络七层模型中&#xff0c;IP 地址在 OSI 模型第三层&#xff0c;MAC 地址在第二层&#xff0c;彼此不直接通信。 在通过以…

HTMLCSS(入门)

HTML <html> <head><title>第一个页面</title></head><body>键盘敲烂&#xff0c;工资过万</body> </html> <!DOCTYPE>文档类型声明&#xff0c;告诉浏览器使用哪种HTML版本显示网页 <!DOCTYPE html>当前页面采取…

汽车零部件材料耐候性测试氙光太阳辐射系统试验箱

概述 汽车零部件等领域的材料耐候性测试是一项关键的质量控制环节&#xff0c;它关乎汽车部件在各种气候条件下的性能表现和寿命。塑料件光照老化实验箱&#xff0c;即氙灯老化试验箱&#xff0c;在其中扮演着至关重要的角色。通过模拟自然环境中的光照、温度、湿度等条件&…

分享一个在 WinForm 桌面程序中使用进度条展示报表处理进度的例子,提升用户体验

前言 在有些比较消耗时间的业务场景中&#xff0c;比如生成报表等&#xff0c;如果没有在操作的过程中向用户反馈操作进度&#xff0c;会让用户以为程序 “死” 掉了&#xff0c;用户体验非常不好。 WinForm 桌面程序项目与 Console 项目不一样&#xff0c;如果 Console 项目…

农村程序员陈随易2024年中总结

今天是 2024年7月1日&#xff0c;时间如白驹过隙&#xff0c;今年已去其一半。 总结一下今年上半年的情况&#xff0c;给大家提供一些参考和建议。 希望大家关注一下公众号 陈随易&#xff0c;有些内容只在公众号发表。 先看看我的年初计划&#xff0c;这个在今年年初的时候&…

【解锁未来:深入了解机器学习的核心技术与实际应用】

解锁未来&#xff1a;深入了解机器学习的核心技术与实际应用 &#x1f48e;1.引言&#x1f48e;1.1 什么是机器学习&#xff1f; &#x1f48e;2 机器学习的分类&#x1f48e;3 常用的机器学习算法&#x1f48e;3.1 线性回归&#xff08;Linear Regression&#xff09;&#x1…

141个图表,完美展示数据分类别关系!

本文介绍使用Python工具seaborn详细实现分类关系图表&#xff0c;包含8类图141个代码模版。 分类关系图表用于展示数字变量和一个或多个分类变量之间的关系&#xff0c;可以进一步分为&#xff1a;箱形图&#xff08;box plot&#xff09;、增强箱形图&#xff08;enhanced bo…

C++进阶 | [4.3] 红黑树

摘要&#xff1a;什么是红黑树&#xff0c;模拟实现红黑树 红黑树 &#xff0c;是一种 二叉搜索树 &#xff0c;但 在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是 Red 或 Black 。 通过对 任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树…

创建XCOM窗体和跳转连接

Xcom 窗体&#xff1a; (groupBox组合框&#xff0c;comboBox下拉框) xcom代码&#xff1a; namespace _01_作业 {// 1kb 1024B 1200B// 1MB public partial class Form1 : Form{public List<string> botelv new List<string> { "600","1200&…