Git 基本操作(一)

目录

git add

git commit 

git log 

git status

git diff

git 版本回退 

git reset


git add

        git add 指令为添加工作区中的文件到暂存区中。

git add file_name; //将工作区名称为file_name的文件添加进暂存区
git add  .; //将工作区中的所有文件添加进暂存区

git commit 

        git commit 指令为将暂存区中的文件添加到master分支中。

git commmit -m "这里为对这一次文件提交的描述"

         需要注意的是,git commit -m 中的 -m 选项是必须要含有的,表示添加的日志信息是什么。

git log 

        git log 用于查看提交的日志。

git log

        通过上图我们不难发现,在 commit 后面有一个很长的 16 进制序列数字,这个数字我们称之为一个 commit id,它是经过哈希算法获得的具有唯一性的 id,可以用于定位每一次的文 件提交。

git log --pretty==oneline //将提交日志信息以一行的方式显示出来

        git add 以及 git commit 之后,工作区中的文件就已经被添加到了版本库中的 master 分支中。 

        1.此时查看版本库的目录结构,在目录中生成了 HEAD 指针。

        HEAD 指针指向了,版本库目录中的 master 分支。 

        2.在目录中也生成了 index 目录,里面存放的就是工作区的文件被添加进暂存区之后生成的索引文件。

        3.在目录中生成了 objects 目录,这个目录里面存储的是,工作区的文件被每次修改并 git add 以及 git commit 之后,生成的 Git 对象,这个 Git 对象可以用于历史文件版本的恢复,里面存储的是每一次 git commit 之后生成的 commit id 哈希值。

        4.在目录中生成了 master 目录,这个目录里面存放的是,最新一次提交的 commit id

        通过这个 commit id 找到了上一次提交的 commit id

        根据,上一次提交的 commit id 可以找到对应的 blob 对象,这是在工作区的文件被 git add 之后创建的对象,里面存储文件内容。 

        根据 blob 对象的哈希值,可以读取文件的内容。

git status

        我们对工作区中的 ReadMe 文件进行修改,此时工作区中的 ReadMe 文件和本地仓库中的 ReadMe 文件就是不想通的,我们怎样查看当前的本地仓库的状态呢?

        可以使用 git status 指令,查看本地仓库的状态。

        通过显示的内容我们可以得知,我们已经对工作区中的 ReadMe 文件进行了修改,但是还没有 进行 add commit。 

        git add 之后,查看本地仓库状态。

        通过上图我们发现,git add 之后提示我们还没有 commit。 

        git commit 之后,查看本地仓库状态。

        通过上图发现,git commit 之后,我们已经不需要再去提交任何内容。 

git diff

        还是上述的场景我们对工作区中的 ReadMe 文件进行了修改,那么我们怎么样得知工作区ReadMe 文件和版本库中的 ReadMe 文件的区别呢?
        我们可以使用 git diff 指令查看其区别。

        区别就是我们在工作区中的 ReadMe 文件中添加了 hello yjd!!! 字符串。 

git 版本回退 

        有些时候我们可能会对同一个文件进行多次更改和提交,但是有时候我们发现最新的版本不符合我们的要求,此时我们就要回退到历史的版本,此时我们就需要使用 git 版本回退的相关指令。

git reset

        在 git 版本回退时,我们使用 git reset 指令进行版本的回退。

        还是上述场景,我们对 ReadMe文件进行了修改,修改前我们简称为 git ,修改之后我们简称为 git/yjd。git 版本的回退有很多的选项,图示如下。

工作区暂存区版本库选项
git/yjdgit/yjdgit--soft
git/yjdgitgit--mixed(默认选项
gitgitgit--hard(慎用

        工作区中存储的就是文件本身,而暂存区中存储的是 git add 之后的在 object 目录下生成的 blob 对象的哈。什么是 blob 对象?

        我们知道,一旦我们一 git add 文件,就会在 object 目录下生成一个 git 对象,git 对象用于版本控制,而 blob 对象就是 git 对象中的一个对象,可以理解为这个对象中存放的就是文件中的内容。

      每次 git add 都会生成一个 git 对象,但是如果此次的修改没有修改内容,就不会生成一个新的 blob 对象,而是会复用之前的已经存在的 blob 对象,两个 git 对象通过同一个 哈希id 找到了同一个 blob 对象。

       暂存区中存储的就是 blob 对象的 哈希id ,而版本库中存储的就是 object 目录下的 blob 对象。

  • --soft 选项:会将 版本库中的 blob 对象回退,但是不会将暂存区中的 哈希id 和工作区的文件进行回退。
  • --mixed 选项:会将 版本库中的 blob 对象回退,会将暂存区中的 哈希id 回退,不会将工作区中的文件回退。
  • --hard 选项:会将 版本库,暂存区,工作区都回退,但是建议不要使用 --hard 选项,因为有可能有人正在使用这个工作区中的文件,你使用 --hard 选项进行回退,就会导致当前写入的全部文件删除,所以慎用。

        如何去进行回退呢?我们使用 --hard 选项进行演示。

        1.先通过 git log 查看历史的提交日志,选取回退的版本。

        2.使用 git reset --hard 哈希id 的方式进行回退。

        3.查看是否回退。

 

        此时确实是已经完成了回退。 

        如果此次回退我们后悔了,想回退到之前,还可以进行回退吗?

        此时查询 git log 日志查询出来的 commit id 已经是第一次 commit id 了,所以通过当前的 git log 是不可以进行撤销此次回退的,我们可以根据之前 git log 查询结果进行撤销此次回退。

        但是,如果我们在打印完了上次的 git log 之后就关闭了终端,此时再次打开终端是就无法查看上一次的 git log 结果了,此时想进行撤销回退, 可以使用 git reflog 查看历史指令进行此次回退的撤销。

        即使在历史的日志中,对应的哈希id部分哈希id也可以进行历史版本的回退。 

        说白了,无论是正常的回退还是撤销回退,其实就是通过 commit 之后的 commit id (哈希id) 将此时的 工作区 暂存区 版本库 中的相关信息设置为对应的 哈希id 所处的版本。 

         所以 git 版本控制,其实就是 commit id(哈希id) 的控制。

        以上便是本期的所有内容。

        本期内容到此结束^_^

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

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

相关文章

docker打包镜像时提示permission denied

sudo usermod -aG docker $USER //让当前用户加入docker用户组 sudo systemctl restart docker //重新启动docker服务 newgrp docker //更新组权限 来源:docker命令出现permission denied的解决方法_permission denied while trying to connect…

Deepseek常用高效提问模板!

DeepSeek高效提问秘籍大放送! 掌握这些实用提问模板,能让你与DeepSeek的对话更加精准、高效! 1. 精准阐述需求 提问时务必清晰明确地表达问题或任务。例如: 欠佳的提问:“随便说点内容。”优化后的提问&#xff1a…

地震资料偏移成像中,多次波(多次反射波)处理

在地震资料偏移成像中,多次波(多次反射波)会降低成像质量,导致虚假同相轴和构造假象。处理多次波需要结合波场分离和压制技术,以下是主要方法和开源算法参考: 1. 多次波处理的核心方法 (1) 基于波场分离的…

quickbi finebi 测评(案例讲解)

quickbi & finebi 测评 国产BI中入门门槛比较低的有两个,分别是quickbi和finebi。根据我的经验通过这篇文章做一个关于这两款BI的测评文章。 quickbi分为个人版、高级版、专业版、私有化部署四种。这篇文章以quickbi高级版为例,对quickbi进行分享。…

【进阶】--函数栈帧的创建和销毁详解

目录 一.函数栈帧的概念 二.理解函数栈帧能让我们解决什么问题 三.相关寄存器和汇编指令知识点补充 四.函数栈帧的创建和销毁 4.1.调用堆栈 4.2.函数栈帧的创建 4.3 函数栈帧的销毁 一.函数栈帧的概念 --在C语言中,函数栈帧是指在函数调用过程中,…

基于大模型预测的输尿管癌诊疗全流程研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型预测输尿管癌的原理与方法 2.1 大模型技术概述 2.2 用于输尿管癌预测的大模型选择 2.3 数据收集与处理 2.4 模型训练与优化 三、术前风险预测与手术方案制定 3.1 术前风险预测指标 3.2 大模型预测…

【Machine Learning Q and AI 读书笔记】- 03 小样本学习

Machine Learning Q and AI 中文译名 大模型技术30讲,主要总结了大模型相关的技术要点,结合学术和工程化,对LLM从业者来说,是一份非常好的学习实践技术地图. 本文是Machine Learning Q and AI 读书笔记的第3篇,对应原…

PETR和位置编码

PETR和位置编码 petr检测网络中有2种类型的位置编码。 正弦编码和petr论文提出的3D Position Embedding。transformer模块输入除了qkv,还有query_pos和key_pos。这里重点记录下query_pos和key_pos的生成 query pos的生成 先定义reference_points, shape为(n_query…

Ubuntu搭建 Nginx以及Keepalived 实现 主备

目录 前言1. 基本知识2. Keepalived3. 脚本配置4. Nginx前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn Java基本知识: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRU…

文章记单词 | 第56篇(六级)

一,单词释义 interview /ˈɪntəvjuː/: 名词:面试;采访;面谈动词:对… 进行面试;采访;接见 radioactive /ˌreɪdiəʊˈktɪv/:形容词:放射性的&#xff…

MATLAB函数调用全解析:从入门到精通

在MATLAB编程中,函数是代码复用的核心单元。本文将全面解析MATLAB中各类函数的调用方法,包括内置函数、自定义函数、匿名函数等,帮助提升代码效率! 一、MATLAB函数概述 MATLAB函数分为以下类型: 内置函数&#xff1a…

哈希表笔记(二)redis

Redis哈希表实现分析 这份代码是Redis核心数据结构之一的字典(dict)实现,本质上是一个哈希表的实现。Redis的字典结构被广泛用于各种内部数据结构,包括Redis数据库本身和哈希键类型。 核心特点 双表设计:每个字典包含两个哈希表&#xff0…

PDF嵌入隐藏的文字

所需依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-core</artifactId><version>9.0.0</version><type>pom</type> </dependency>源码 /*** PDF工具*/ public class PdfUtils {/*** 在 PD…

RAG工程-基于LangChain 实现 Advanced RAG(预检索-查询优化)(下)

Multi-Query 多路召回 多路召回流程图 多路召回策略利用大语言模型&#xff08;LLM&#xff09;对原始查询进行拓展&#xff0c;生成多个与原始查询相关的问题&#xff0c;再将原始查询和生成的所有相关问题一同发送给检索系统进行检索。它适用于用户查询比较宽泛、模糊或者需要…

【业务领域】PCIE协议理解

PCIE协议理解 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 PCIE学习理解。 文章目录 PCIE协议理解[TOC](文章目录) 前言零、PCIE掌握点&#xff1f;一、PCIE是什么&#xff1f;二、PCIE协议总结物理层切速 链路层事务层6.2 TLP的路…

Jupyter notebook快捷键

文章目录 Jupyter notebook键盘模式快捷键&#xff08;常用的已加粗&#xff09; Jupyter notebook键盘模式 命令模式&#xff1a;键盘输入运行程序命令&#xff1b;这时单元格框线为蓝色 编辑模式&#xff1a;允许你往单元格中键入代码或文本&#xff1b;这时单元格框线是绿色…

Unity图片导入设置

&#x1f3c6; 个人愚见&#xff0c;没事写写笔记 &#x1f3c6;《博客内容》&#xff1a;Unity3D开发内容 &#x1f3c6;&#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f50e;Unity支持的图片格式 ☀️BMP:是Windows操作系统的标准图像文件格式&#xff0c;特点是…

Spark-小练试刀

任务1&#xff1a;HDFS上有三份文件&#xff0c;分别为student.txt&#xff08;学生信息表&#xff09;result_bigdata.txt&#xff08;大数据基础成绩表&#xff09;&#xff0c; result_math.txt&#xff08;数学成绩表&#xff09;。 加载student.txt为名称为student的RDD…

内存安全的攻防战:工具链与语言特性的协同突围

一、内存安全&#xff1a;C 开发者永恒的达摩克利斯之剑 在操作系统内核、游戏引擎、金融交易系统等对稳定性要求苛刻的领域&#xff0c;内存安全问题始终是 C 开发者的核心挑战。缓冲区溢出、悬空指针、双重释放等经典漏洞&#xff0c;每年在全球范围内造成数千亿美元的损失。…

OceanBase数据库-学习笔记1-概论

多租户概念 集群和分布式 随着互联网、物联网和大数据技术的发展&#xff0c;数据量呈指数级增长&#xff0c;单机数据库难以存储和处理如此庞大的数据。现代应用通常需要支持大量用户同时访问&#xff0c;单机数据库在高并发场景下容易成为性能瓶颈。单点故障是单机数据库的…