【Git 学习笔记】Ch1.1 Git 简介 + Ch1.2 Git 对象
还是绪个言吧
今天整理 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 的数据模型:

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
这里的 -p 即 pretty 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:

查看 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

可见,标签由以下部分组成:
- 对象(object):此处即
master分支的最新commit - 类型(type):为
commit型(commits、blobs与trees都可以添加标签) - 标签名(tag name):
v1.0 - 贴标签人(tagger)及时间戳(timestamp):
John Doe <john.doe@example.com> 1526017989 +0200 - 标签注释内容(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-tree 或 git 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
相关文章:
【Git 学习笔记】Ch1.1 Git 简介 + Ch1.2 Git 对象
还是绪个言吧 今天整理 GitHub 仓库,无意间翻到了几年前自学 Git 的笔记。要论知识的稳定性,Git 应该能挤进前三——只要仓库还在,理论上当时的所有开发细节都可以追溯出来。正好过段时间会用到 Git,现在整理出来就当温故知新了。…...
Python 中别再用 ‘+‘ 拼接字符串了!
目录 引言 为什么不推荐使用 "" 示例代码 更高效的替代方法 使用 join 方法 示例代码 使用格式化字符串(f-strings) 示例代码 引言 大家好,在 Python 编程中,我们常常需要对字符串进行拼接。你可能会自然地想到…...
六西格玛绿带培训的证书有什么用处?
近年来,六西格玛作为一套严谨而系统的质量管理方法,被广泛运用于各行各业。而六西格玛绿带培训证书,作为这一方法论中基础且重要的认证,对于个人和企业而言,都具有不可忽视的价值。本文将从多个角度深入探讨六西格玛绿…...
《妃梦千年》第二十章:风雨欲来
第二十章:风雨欲来 战斗的胜利让林清婉和皇上的关系更加亲密,但宫中的阴谋却并未因此而停止。一天,林清婉正在寝宫中思考未来的对策,忽然接到一个紧急消息。小翠匆匆跑来,神色紧张:“娘娘,太后…...
深入理解二分法
前言 二分法(Binary Search)是一种高效的查找算法,广泛应用于计算机科学和工程领域。它用于在有序数组中查找特定元素,其时间复杂度为 O(log n),显著优于线性搜索的 O(n)。本文将深入介绍二分法的原理、实现及其应用场…...
【C命名规范】遵循良好的命名规范,提高代码的可读性、可维护性和可复用性
/******************************************************************** * brief param return author date version是代码书写的一种规范 * brief :简介,简单介绍函数作用 * param :介绍函数参数 * return:函数返回类型说明 * …...
Hbase面试题总结
一、介绍下HBase架构 --HMaster HBase集群的主节点,负责管理和协调整个集群的操作。它处理元数据和表的分区信息,控制RegionServer的负载均衡和故障恢复。--RegionServer HBase集群中的工作节点,负责存储和处理数据。每个RegionServer管理若…...
C语言部分复习笔记
1. 指针和数组 数组指针 和 指针数组 int* p1[10]; // 指针数组int (*p2)[10]; // 数组指针 因为 [] 的优先级比 * 高,p先和 [] 结合说明p是一个数组,p先和*结合说明p是一个指针 括号保证p先和*结合,说明p是一个指针变量,然后指…...
Rust学习笔记 (命令行命令) : 用override set 设置工具链
在cargo run某个项目时出现了如下错误:error: failed to run custom build command for ring v0.16.20(无法运行“Ring v0.16.20”的自定义构建命令),在PowerShell命令行运行命令 rustup override set stable-msvc后成功运行。 o…...
cv::Mat类的矩阵内容输出的各种格式的例子
操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:Visual Studio Code编程语言:C11 功能描述 我们可以这样使用:cv::Mat M(…); cout << M;,直接将矩阵内容输出到控制台。 输出格式支持多种风格,包括O…...
Redis--注册中心集群 Cluster 集群-单服务器
与“多服务器集群”一致需要创建redis配置模板 参照以下链接 CSDN 创建redis容器 node01服务器上创建容器 docker run -d --name redis-6381 --net host --privilegedtrue \ -v /soft/redis-cluster/6381/conf/redis.conf:/etc/redis/redis.conf \ -v /soft/redis-cluster/6…...
CV01_相机成像原理与坐标系之间的转换
目录 0.引言:小孔成像->映射表达式 1. 相机自身的运动如何表征?->外参矩阵E 1.1 旋转 1.2 平移 2. 如何投影到“像平面”?->内参矩阵K 2.1 图像平面坐标转换为像素坐标系 3. 三维到二维的维度是如何丢失的?…...
Android Lint
文章目录 Android Lint概述工作流程Lint 问题问题种类警告严重性检查规则 用命令运行 LintAndroidStudio 使用 Lint忽略 Lint 警告gradle 配置 Lint查找无用资源文件 Android Lint 概述 Lint 是 Android 提供的 代码扫描分析工具,它可以帮助我们发现代码结构/质量…...
【算法刷题 | 动态规划14】6.28(最大子数组和、判断子序列、不同的子序列)
文章目录 35.最大子数组和35.1题目35.2解法:动规35.2.1动规思路35.2.2代码实现 36.判断子序列36.1题目36.2解法:动规36.2.1动规思路36.2.2代码实现 37.不同的子序列37.1题目37.2解法:动规37.2.1动规思路37.2.2代码实现 35.最大子数组和 35.1…...
vue3 vxe-grid列中绑定vxe-switch实现数据更新
1、先上一张图: <template #valueSlot"{ row }"><vxe-switch :value"getV(row.svalue)" change"changeSwitch(row)" /></template>function getV(value){return value 1;};function changeSwitch(row) {console.l…...
Hive SQL:实现炸列(列转行)以及逆操作(行转列)
目录 列转行行转列 列转行 函数: EXPLODE(ARRAY):将ARRAY中的每一元素转换为每一行 EXPLODE(MAP):将MAP中的每个键值对转换为两行,其中一行数据包含键,另一行数据包含值 数据样例: 1、将每天的课程&#…...
MD5算法详解
哈希函数 是一种将任意输入长度转变为固定输出长度的函数。 一些常见哈希函数有:MD5、SHA1、SHA256。 MD5算法 MD5算法是一种消息摘要算法,用于消息认证。 数据存储方式:小段存储。 数据填充 首先对我们明文数据进行处理,使其…...
ES6的代理模式-Proxy
语法 target 要使用 Proxy 包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理handler 一个通常以函数作为属性的对象,用来定制拦截行为 const proxy new Proxy(target, handle)举个例子 <s…...
排序(堆排序、快速排序、归并排序)-->深度剖析(二)
前言 前面介绍了冒泡排序、选择排序、插入排序、希尔排序,作为排序中经常用到了算法,还有堆排序、快速排序、归并排序 堆排序(HeaSort) 堆排序的概念 堆排序是一种有效的排序算法,它利用了完全二叉树的特性。在C语言…...
七一建党节|热烈庆祝中国共产党成立103周年!
时光荏苒,岁月如梭。 在这热情似火的夏日, 我们迎来了中国共产党成立103周年的重要时刻。 这是一个值得全体中华儿女共同铭记和庆祝的日子, 也是激励我们不断前进的重要时刻。 103年, 风雨兼程,砥砺前行。 从嘉兴…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
