【书籍篇】Git 学习指南(三)版本库与分支

Git 学习指南(三)版本库与分支

  • 五. 版本库
    • 5.1 一种简单而高效的存储系统
    • 5.2 存储目录:Blob与Tree
    • 5.3 相同数据只存储一次
    • 5.4 压缩相似内容
    • 5.5 不同文件散列值相同的情况
    • 5.6 提交对象
    • 5.7 提交历史中的对象宠用
    • 5.8 重命名、移动与复制
  • 六. 分支
    • 6.1 并行使开发
    • 6.2 修复旧版本中的bug
    • 6.3 分支
    • 6.4 泳道
    • 6.5 当前活跃分支
    • 6.6 重置分支指针
    • 6.7 删除分支
    • 6.8 清理提交对象
  • 七. 合并分支
    • 7.1 合并过程中发生的事
    • 7.2 冲突
    • 7.3 编辑冲突
    • 7.4 冲突标志
    • 7.5 解决编制冲突
    • 7.6 内容冲突
    • 7.7 快进合并
    • 7.8 第一父级提交历史
    • 7.9 棘手的合并冲突
    • 7.10 摆烂


读前须知: 本篇章内容取自《Git 学习指南》 P33~P56,如需更多详细内容请购买正版书籍
上一章节: 【书籍篇】Git 学习指南(二)提交与多次提交
下一章节:


五. 版本库


Git主要由两个层面构成: (1)顶层结构(瓷质命令)(2)底层结构(管道)

瓷质命令: 例如log、reset、commit等命令

管道: 一组带有少量选项的简单命令,瓷质命令的基础


5.1 一种简单而高效的存储系统


Git: 核心是一个对象数据库,可用来存储文本或二进制数据


命令描述
git hash-object -w dev.txt将文件里的记录插入到对象数据库中,返回一个键值
git cat-file -p [键值]从对象数据库中取出数据

5.2 存储目录:Blob与Tree


Git使用一种包含两个节点类型的简单树结构。

(1)文件内容将保持不变,并以blob对象的形式按字节被存储在对象数据库中

(2)目录则将用tree对象来表示


5.3 相同数据只存储一次


为了节省内存空间,Git对于相同数据将只存储一次。两个相同的文件返回的散列值相同


$ git hash-object -w dev.txt
9ef6c44f066c4a066cfd2df21a536b5a6958e724$ git hash-object -w dev-clone.txt
9ef6c44f066c4a066cfd2df21a536b5a6958e724

5.4 压缩相似内容


Git对与旧文件差别不大的新文件采用增量方法来存储这些文件


5.5 不同文件散列值相同的情况


(1)散列值的可能取值有2^160个
(2)运行了五年的linux内核项目也仅有2^21个对象


5.6 提交对象


tree: 描述该提交的内容

parent: 指的是它的上一次提交

author: 作者

committer: 提交者

​ 提交注释


$ git cat-file -p db237a0
tree 0d4285779205fa3b297d7065640b29ad13c43de2
parent 5de4b2ffdfa84f7a4d9f16912ddebab8f4e593ad
author jieKaMi <l> 1700579541 +0800
committer jieKaMi <l> 1700579541 +0800first

5.7 提交历史中的对象宠用


一次提交往往只涉及项目中少数文件修改,而其它大部分文件和目录不会发生变化,所以Git尽可能多地重用前次提交中的相关对象


5.8 重命名、移动与复制


概念: 略。。。详细内容《Git 学习指南》 P37~P38


命令描述
git log --summary -M90% | grep -e “^ xxxx”获取一份摘要
git log --follow dev.txt跟踪被移动文件的历史
git log --summary -C90% grep -e “^ xxxx”跟踪被复制的数据
git config diff.renames true重命名检测配制成Git的默认选项
git blame -M -C -C -C dev.txt逐行打印源头信息

六. 分支


版本提交不能依次进行的原因:(1)有两个以上的开发者在对同一项目进行并行式开发 (2)为修复旧版本中的bug而必须要创建和发布新的版本

6.1~6.4 略。。。详细内容《Git 学习指南》 P41~P42


6.1 并行使开发

6.2 修复旧版本中的bug

6.3 分支

6.4 泳道

6.5 当前活跃分支


切换分支被拒绝

(1)提交修改:git commit -all

(2)放弃修改:git checkout --force A

(3)存储修改:git stash、git checkout A


命令描述
git branch A创建分支A
git branch B [散列值]指定提交创建分支
git branch C A从现有分支中创建分支
git checkout A切换分支
git checkout -b D创建并切换分支

6.6 重置分支指针


重置分支指针: git reset --hard [散列值]

reset --hard命令会覆盖当前工作区和暂存区中的所有修改,所以最好执行前先用git stash命令存储一下这些修改


6.7 删除分支

命令描述
git branch -d A删除分支A
git branch -D A强制删除分支A
git branch A [散列值]在已知提交的散列值的情况下,恢复分支A
git reflog找到需要恢复分支的提交散列值
git branch A HEAD@{1}恢复指定散列值的分支

6.8 清理提交对象


gc命令: 用于清理版本库,移除所有不属于当前分支的提交对象


七. 合并分支

略。。。详细内容《Git 学习指南》 P46~P56

7.1 合并过程中发生的事

7.2 冲突

冲突描述
编辑冲突通常发生在两个开发者对同一行代码做了不同修改的时候
内容冲突通常发生在连个开发者对某份代码的几个部分做出各自修改的时候

7.3 编辑冲突

7.4 冲突标志

7.5 解决编制冲突

7.6 内容冲突

7.7 快进合并

7.8 第一父级提交历史

7.9 棘手的合并冲突

7.10 摆烂

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

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

相关文章

golang学习笔记——切片

切片是数组或另一个切片之上的数据结构。 我们将源数组或切片称为基础数组。 通过切片&#xff0c;可访问整个基础数组&#xff0c;也可仅访问部分元素。 切片只有 3 个组件&#xff1a; 指向基础数组中第一个可访问元素的指针。 此元素不一定是数组的第一个元素 array[0]。切…

【WiFI问题自助】解决WiFi能连上但是没有网的问题

WiFi能连上但是没有网的问题 背景&#xff1a;wifi能连上&#xff0c;但是没有网 解决 遇事不决&#xff0c;先重启啊&#xff01;怎么重启&#xff1f;拔掉电源再插上&#xff01;拔掉网线再插上&#xff01; 直接ok了。 思考记录 今天WiFi又上不了网了&#xff0c;昨天报…

【OpenCV实现图像:使用OpenCV进行图像处理之透视变换】

文章目录 概要计算公式举个栗子实际应用小结 概要 透视变换&#xff08;Perspective Transformation&#xff09;是一种图像处理中常用的变换手段&#xff0c;它用于将图像从一个视角映射到另一个视角&#xff0c;常被称为投影映射。透视变换可以用于矫正图像中的透视畸变&…

MySQL高可用性:主从复制、读写分离与集群搭建

MySQL作为常用的关系型数据库管理系统&#xff0c;在构建高可用性解决方案上有着多种实践方法。本文将深入探讨MySQL的主从复制、读写分离以及集群搭建&#xff0c;为实现高可用性提供详细指南。 1. 主从复制&#xff08;Master-Slave Replication&#xff09; 1.1 什么是主从…

Jenkins 配置节点交换内存

查看交换内存 free -hswapon -s创建swap文件 dd if/dev/zero of/mnt/swap bs1M count1024启用交换文件 设置权限 chmod 600 /mnt/swap设置为交换空间 mkswap /mnt/swap启用交换 swapon /mnt/swap设置用户组 chown root:root /mnt/swap查看 swapon -s重启系统也能生效还需要修…

设计模式-行为型模式-模板方法模式

一、什么是模板模式 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一个算法骨架&#xff0c;允许子类在不改变算法整体结构的情况下重新定义算法的某些步骤。 主要组成部分&#xff1a; 1、模板方法&#xff08;Templ…

JS解决跨域问题

在JavaScript中&#xff0c;解决跨域问题主要可以通过以下几种方法&#xff1a; JSONP (JSON with Padding)&#xff1a; JSONP 是通过在 DOM 中插入 <script> 标签&#xff0c;利用 script 标签的 src 属性不受同源策略限制的特性&#xff0c;实现跨域数据请求。示例&am…

论文笔记:Localizing Cell Towers fromCrowdsourced Measurements

2015 1 Intro 1.1 motivation opensignal.com 、cellmapper.net 和 opencellid.org 都是提供天线&#xff08;antenna&#xff09;位置的网站 他们提供的天线位置相当准确&#xff0c;但至少在大多数情况下不完全正确这个目标难以实现的原因是蜂窝网络供应商没有义务提供有…

.NET 使用配置文件

我简单测试了一下json格式配置文件&#xff0c;在这里记录一下&#xff0c;方便以后查看。 需要引用的库&#xff1a; Microsoft.Extensions.Hosting 创建json格式文件&#xff1a;appsettings.json 在工程文件中包含json文件&#xff1a; <ItemGroup><Content In…

面试题:数据库日期类型字段,需要兼容不同数据库,应该如何选择?

当设计一个产品&#xff0c;其中很多地方要把日期类型保存到数据库中&#xff0c;如果产品有兼容不同数据库产品的需求&#xff0c;那么&#xff0c;应当怎样设计呢&#xff1f; 当然&#xff0c;首先想到的是&#xff0c;使用数据库的 Date 或 DateTime 类型&#xff0c;可是…

wincc定时器功能介绍

1定时器功能介绍 WinCC中定时器的使用可以使WinCC按照指定的周期或者时间点去执行任务&#xff0c;比如周期执行变量归档、在指定的时间点执行全局脚本或条件满足时打印报表。WinCC已经提供了一些简单的定时器&#xff0c;可以满足大部分定时功能。但是在有些情况下&#xff0c…

Python 基础语法 Hello, World!

Python 基础语法 import concurrent.futures import threading import timedef switch_case(argument):switch {1: "这是第一种情况",2: "这是第二种情况",3: "这是第三种情况"}return switch.get(argument, "这是默认情况")def my_…

【计算机网络】多路复用的三种方案

文章目录 1. selectselect函数select的工作特性select的缺点 2. pollpoll函数poll与select的对比 3. epollepoll的三个接口epoll的工作原理epoll的优点LT和ET模式epoll的应用场景 &#x1f50e;Linux提供三种不同的多路转接&#xff08;又称多路复用&#xff09;的方案&#xf…

6、信息打点——Web架构篇语言中间件数据库系统源码获取

1、信息搜集搜集哪些东西&#xff1f; 架构信息收集&#xff0c;主要包括&#xff1a;操作系统、开发语言、中间件容器、数据库类型、第三方软件等&#xff1b; web源码信息收集&#xff0c;CMS开源&#xff1f;闭源&#xff1f;售卖&#xff1f;自主研发&#xff1f; 进行web…

【python FastAPI】fastapi中如何限制输入参数,如何让docs更好看,如何自定义错误码json返回

原则&#xff1a; 输入输出都基于BaseModel依靠JSONResponse制定返回错误的json信息依靠装饰器中app.post制定responses字典从而让docs文档更丰富 import uvicorn from pydantic import BaseModel, Field from fastapi import FastAPI, HTTPException from fastapi.middleware…

Python之pyc文件的生成与反编译

目录 1、什么是pyc文件 2、手动生成pyc文件 3、pyc文件的执行 4、pyc文件的反编译 1、什么是pyc文件 pyc文件&#xff08;PyCodeObject&#xff09;是Python编译后的结果。当python程序运行时&#xff0c;编译的结果是保存于PyCodeObject&#xff0c;程序运行结束后&#x…

(动手学习深度学习)第13章 实战kaggle竞赛:狗的品种识别

文章目录 1. 导入相关库2. 加载数据集3. 整理数据集4. 图像增广5. 读取数据6. 微调预训练模型7. 定义损失函数和评价损失函数9. 训练模型 1. 导入相关库 import os import torch import torchvision from torch import nn from d2l import torch as d2l2. 加载数据集 - 该数据…

编程中的各种常见的文件编码有哪些?

在计算机编程中&#xff0c;常见的文件编码有很多种。下面是一些常见的文件编码&#xff1a; UTF-8&#xff08;Unicode Transformation Format - 8-bit&#xff09;&#xff1a; 它是一种变长字符编码&#xff0c;能够表示世界上几乎所有的字符&#xff0c;是最常用的 Unicode…

java抽象类和static

抽象类 并不是所有的类都是用来描绘对象的, 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类 使用abstract 修饰类抽象类不能被实例化。在抽象类当中&#xff0c;可以有抽象方法&#xff0c;或者 非抽象方法!什么是抽象方法&#xff0c;一个方…

基于野马算法优化概率神经网络PNN的分类预测 - 附代码

基于野马算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于野马算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于野马优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…