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

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.xdnf.cn/news/243901.html

相关文章:

  • DeepSeek 赋能自然语言处理:从理论到实践的全方位解析
  • GESP2024年6月认证C++八级( 第二部分判断题(1-5))
  • 【2025最新】为什么用ElasticSearch?和传统数据库MySQL与什么区别?
  • 驱动开发系列55 - Linux Graphics QXL显卡驱动代码分析(二)显存管理
  • C++11新特性_自动类型推导
  • (34)VTK C++开发示例 ---将图片映射到平面
  • PostgreSQL数据库操作SQL
  • 2025年- H17-Lc125-73.矩阵置零(矩阵)---java版
  • 坚鹏:工行《DEEPSEEK赋能银行智能办公及数字化营销服务》培训
  • [蓝桥杯 2023 国 Python B] 划分 Java
  • 如何快速定位网络中哪台主机发起ARP攻击
  • 范式演进:从ETL到ELT及未来展望
  • 如何提升个人的稳定性?
  • 学习 Django 之前
  • 数据结构——树(中篇)
  • 论文笔记——QWen2.5 VL
  • 基于大模型预测的输尿管癌诊疗全流程研究报告
  • PDF24 Tools:涵盖20+种PDF工具,简单高效PDF工具箱,支持一键编辑/转换/合并
  • Selenium:模拟真实用户的爬虫
  • 【Python Web开发】04-Cookie和Session
  • 彩带飘落效果
  • 大学之大:香港理工大学2025.5.1
  • 返回类型后置 和 auto推导返回值类型
  • Vue 3 中通过 this. 调用 setup 暴露的函数
  • 使用CubeMX新建DMA工程——存储器到外设模式
  • 21 课时精通生成式 AI:微软官方入门指南详解
  • 人工智能发展对未来IT从业岗位的展望
  • Java大厂硬核面试:Flink流处理容错、Pomelo JVM调优、MyBatis二级缓存穿透防护与Kubernetes服务网格实战解析
  • Rust多线程性能优化:打破Arc+锁的瓶颈,效率提升10倍
  • SpringBoot研究生双选系统开发实现