四、Git本地仓库基本操作——查看提交历史和版本回退前进

news2024/9/21 20:40:13

1. 查看提交历史

查看git提交历史一般常用两个命令:

# 查看历史提交记录
git log   

# 以列表形式查看指定文件的历史记录
git blame <文件名>

git log

该命令会按照我们提交的时间线,然后列出所有的历史提交。

示例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x018iJol-1670132301876)(../picture/image-20221203221619650.png)]

git log 显示的提交历史信息,一般包含下面4条信息:

但是, git log 命令还有很多选项参数供我们选择,以便我们控制输出提交信息的形式。

  • 比如我们想查看比较简短的提交信息,可以使用 --oneline 参数,git log --oneline
  • 比如我们查看指定作者的提交信息,git log --author=用户名

下表列出了 git log 命令的常用选项参数及作用:

参数作用
-p按补丁格式显示每个更新之间的差异
–-stat显示每次更新的文件修改统计信息
–-shortstat只显示 --stat 中最后的行数修改添加移除统计
–-name-only仅在提交信息后显示已修改的文件清单
–-name-status显示新增、修改、删除的文件清单
–-abbrev-commit仅显示 SHA-1 的前几个字符,而非所有的 40 个字符
–-relative-date使用较短的相对时间显示(比如,“2 weeks ago”)
–-graph显示 ASCII 图形表示的分支合并历史
–-pretty使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)
-(n)仅显示最近的 n 条提交
–-since, --after仅显示指定时间之后的提交
–-until, --before仅显示指定时间之前的提交
–-author仅显示指定作者相关的提交
–-committer仅显示指定提交者相关的提交

详细解释可参考下面这篇文章的解释:

https://blog.csdn.net/jjlovefj/article/details/86476925

示例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kvjA0nzT-1670132301877)(../picture/image-20221203223842427.png)]

git blame

如果要查看指定文件的修改记录可以使用 git blame 命令,命令格式如下:

git blame <file>

示例

2. 版本的前进和回退

Git版本前进回退的本质是移动HEAD指针。HEAD指针,默认情况下都会指向最新的一次commit(提交)。HEAD和commit的大概关系图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2JMJB3OF-1670132301877)(../picture/image-20221203233059324.png)]

版本的前进或者回退使用 git reset 命令,这样可以指定退回某一次提交的版本。

git reset 命令语法格式如下:

git reset [--soft | --mixed | --hard] [HEAD]

其中,–soft | --mixed | --hard 分别是3个参数。

HEAD 参数说明

  • HEAD 表示当前版本
  • HEAD^ 上一个版本
  • HEAD^^ 上上一个版本
  • HEAD^^^ 上上上一个版本
  • 以此类推…

可以使用 ~数字表示

  • HEAD~0 表示当前版本
  • HEAD~1 上一个版本
  • HEAD^2 上上一个版本
  • HEAD^3 上上上一个版本
  • 以此类推…

2.1 git reset --mixed

–mixed 为默认参数,在执行命令时可以不用带该参数。该参数会移动HEAD指针和重置index(暂存)区,但是工作区的内容保持不变。

1、重置暂存区(就是取消刚刚添加到暂存区的内容)

先通过 git add 命令,把文件提交到暂存区。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QiweGoqD-1670132301878)(../picture/image-20221203234732628.png)]

然后,执行 git reset --mixed 命令,可以把刚刚提交到暂存区的内容恢复,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8B3UBMRD-1670132301878)(../picture/image-20221203235036606.png)]

该命令其实省略了 HEAD,整个完整的命令:

git reset --mixed HEAD

HEAD 其实就是当前版本的意思,该其实就是相当于取消了刚刚添加到缓存(暂存区)的内容。

2、暂存区回退到上一版本

git reset --mixed HEAD^            # 回退所有内容到上一个版本  
git reset --mixed HEAD^ hello.php  # 回退 hello.php 文件的版本到上一个版本  

该命令相当于回退了本地仓库的内容到上一版本(就是恢复了最近一次commit的内容),但是该命令是不会改变工作区的文件的。

2.2 git reset --soft

–soft 参数仅仅只是移动了HEAD指针,暂存区和工作区的内容都不会被改变(相当于只是回退到未提交前的状态)。

git reset --soft HEAD^     # 回退到最近一次未提交前的状态
git reset --soft HEAD~3    # 回退到上上上一次未提交前的状态

示例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J0N8yBmZ-1670132301878)(../picture/image-20221204003938306.png)]

–soft 参数的应用场合一般是:比如我们前面一次commit提交之后,发现提交的说明信息写错了,我们想更改一下提交的说明信息,这个时候我们可以使用 --soft 参数,仅仅回退一下HEAD指针(该参数不会重置暂存区和工作区)。然后我们再次commit,写上正确的提交说明信息即可。

2.3 git reset --hard

–hard 该参数会移动本地库HEAD指针,而且还会重置暂存区和工作区。在使用中一定要谨慎使用。

git reset --hard HEAD^  			# 回退到上一个版本 
git reset --hard HEAD~3  			# 回退到上上上一个版本  
git reset –hard bae128  			# 回退到某个版本回退点之前的所有信息。 
git reset --hard origin/master      # 将本地的状态回退到和远程的一样

2.3.1 版本回退示例

1、先查看git当前状态和提交历史,以及查看 test.c 文件内容:

2、使用 git reset --hard HEAD^ 命令回退上一版本:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lRxTIaKx-1670132301879)(../picture/image-20221204113920223.png)]

使用该命令后,回退到了上一版本了。最近一次commit是提交一个新建的 .gitignore 文件,现在查看提交历史,发现确实少了这一次的提交,而且我查看工作区目录,该文件已经被删除了。

3、再次回退一个版本,查看下 test.c 的内容是否被回退了:

这个时候,HEAD指针相当于已经指向了回退两次之前的commit了。

2.3.2 版本前进示例

上面我们回退了两个版本,而且 --hard 参数是可以更改我们工作区中的内容的。我们发现自己搞错了,不想回退,想恢复原来的版本咋办?

我们也可以通过 git reset --hard 命令恢复刚刚的版本回退(可以说是版本前进吧,反正就是移动HEAD指针)。

使用 HEAD参数的话只能实现版本后退的操作,所以版本的前进我们只能使用索引值来实现。

git reset --hard [HEAD]   # 只能实现版本的后退操作
git reset --hard [索引值]  # 使用索引值既可以实现版本后退,也可以实现版本前进

1、先使用 git log --oneline 命令查看每次提交的索引值。

当然,如果版本已经回退了,git log 命令就之后列出当前的commit。所以我们前面在版本回退之前,可以先把之前的git log信息保存,然后再进行版本回退。

或者也可以使用 git reflog 命令获取到commit的索引值,该命令可以查看到当前仓库所有的改变,如下:

2、使用上面图片的 f226d87 索引值,把版本前进到回退之前的版本。

git reset --hard f226d87

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bDh0MNSw-1670132301879)(../picture/image-20221204130845003.png)]

2.4 总结

  • –mixed 参数,移动HEAD指针,可修改暂存区的内容,但不会修改工作区中的文件。该参数是 reset 命令的默认参数,所以在执行该命令参数的时候可以不写。
  • –soft 参数,该参数只是移动了HEAD的指针,不会影响暂存区和工作区的任何内容。
  • –hard 参数,移动了HEAD指针,还会更改暂存区和工作区中的内容。

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

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

相关文章

[附源码]计算机毕业设计JAVA医疗预约系统

[附源码]计算机毕业设计JAVA医疗预约系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

【Pytorch】广播机制

【参考&#xff1a;The size of tensor a must match the size of tensor b (y) at non-singleton dimension z_点PY的博客-CSDN博客】 报错&#xff1a;The size of tensor a (x) must match the size of tensor b (y) at non-singleton dimension z 其广播机制遵循以下规则…

[附源码]计算机毕业设计基于springboot的连锁药店销售管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

mediasoup学习与实践

一、mediasoup基本概念&#xff1a; 基础架构 1、worker 2、router 3、producer 4、consumer 5、transport 整体结构 特性 1、支持IPv6 2、ICE/DRLS/RTP/RTCP over UDP and TCP 3、支持simulcast和svc 4、支持拥塞控制 5、带宽控制 6、支持&#xff1a;STCP 7、多流使用同一…

安全可靠的SRT实时传输协议

Secure Reliable Transport(SRT)是安全、可靠、低延时的多媒体实时传输协议。SRT协议使用AES进行数据加密&#xff0c;运用FEC进行前向纠错&#xff0c;并且有流量控制、拥塞控制。类似于QUIC协议&#xff0c;SRT采用UDP代替TCP&#xff0c;在应用层提供发送确认机制、ARQ自动重…

ArcGIS基础:点要素分割线要素和提取线要素的交点

第一个实验&#xff1a;【点要素分割线要素】 看下原始数据&#xff1a;下图所示&#xff0c;&#xff12;个红点和一条绿线&#xff0c;用&#xff12;个点去分割这条线。 找到【数据管理工具】&#xff0c;在找到【要素】&#xff0c;再找到【在点处分割线】&#xff0c;如…

【云原生 | Kubernetes 实战】07、Pod 高级实战:Pod 生命周期、启动钩子、停止钩子

目录 一、Pod 生命周期 1.1 pod 生命周期的重要行为 二、初始化容器最佳实战 2.1 Init 容器 2.2 初始化容器使用案例 2.3 初始化容器生产应用 三、主容器 3.1 容器钩子 3.2 演示 postStart 和 preStop 用法 总结 一、Pod 生命周期 pod从开始创建到终止退出的时间…

51单片机自学报告--实验部分

微机接口技术-自主学习笔记 PPT链接&#xff1a;微机接口自学--51单片机自学汇报PPT_猫猫爱吃小鱼的博客-CSDN博客 效果演示gif: 四、Proteus仿真 仿真环境&#xff1a;电路仿真软件: Proteus HEX可执行文件编写软件: keil uVision4 keil uVision4新…

设计模式——模板方法

GOF-23 模式分类 从目的来看&#xff1a; • 创建型&#xff08;Creational&#xff09;模式&#xff1a;将对象的部分创建工作延迟到子类或者其他对象&#xff0c;从而应对需求变化为对象创建时具体类型实 现引来的冲击。 • 结构型&#xff08;Structural&#xff09;模式&a…

OpenCV 透视变换

OpenCV 透视变换1. 简介2. 仿射变换2.1. 平移2.2. 旋转2.3. 放缩2.4. 错切2.5. 仿射变换3. 透视变换1. 简介 汽车的360度全景影像&#xff0c;从拍照视角变成鸟瞰图 这种变换常常用到透视变换 在了解透视变换前&#xff0c;需要了解一下其他的变换&#xff0c;包括 平移&#…

小白必知必会的几个IP协议知识

小白必知必会的几个IP协议知识1.IP地址属于网络层协议2.路由控制3.数据链路的抽象化4.IP属于面向无连接型1.IP地址属于网络层协议 在计算机通信中&#xff0c;为了识别通信对端&#xff0c;必须要有一个类似于地址的识别码进行标识。 MAC地址是用来标识同一个链路中不同计算机…

【C++泛型学习笔记】函数模板

提到C的程序设计方法&#xff0c;最先想到的便是两种&#xff1a;面向过程和面向对象编程。但是当我们去阅读一些优秀的C库源码时&#xff08;比如CGAL&#xff09;&#xff0c;就会直接被其的泛型编程劝退。泛型编程也是C程序设计方法中的一种&#xff0c;不同于上述两种设计方…

一文教你从Linux内核角度探秘JDK NIO文件读写本质(下)

接上文一文教你从Linux内核角度探秘JDK NIO文件读写本质&#xff08;上&#xff09; 10. JDK NIO 对普通文件的写入 FileChannel fileChannel new RandomAccessFile(new File("file-read-write.txt"), "rw").getChannel();ByteBuffer heapByteBuffer B…

LRU和FIFO页面置换算法模拟实战

Introduction 本文将介绍如何使用LRU和FIFO实现页面置换的模拟&#xff08;Python实现&#xff09;&#xff0c;并使用缺页率进行算法的评价。 Requirement 先附上具体的要求: 【实验目的】 &#xff08;1&#xff09;了解内存分页管理策略 &#xff08;2&#xff09;掌握…

[附源码]JAVA毕业设计昆明市人民医院血库管理系统(系统+LW)

[附源码]JAVA毕业设计昆明市人民医院血库管理系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。…

SSM框架-SpringMVC(一)

目录 1 SpringMVC简介 1.1 什么是mvc 1.2 什么是SpringMVC 1.3 SpringMVC的特点 2 入门案例 2.1 开发环境 2.2 创建maven工程 2.3 配置web.xml 2.4 创建请求控制器 2.5 创建SpringMVC配置文件 2.6 测试HelloWorld 2.7 优化配置 3 RequestMapping注解 3.1 RequestM…

3. 递归

3.1 递归 假设你在祖母的阁楼中翻箱倒柜&#xff0c;发现了一个上锁的神秘手提箱。 祖母告诉你&#xff0c;钥匙很可能在下面这个盒子里。 这个盒子里有盒子&#xff0c;而盒子里的盒子又有盒子。钥匙就在某个盒子中。 为找到钥匙&#xff0c;你将使用什么算法? 第一种&…

c++ word 不依赖软件操作

1、Duck 可以提取word的内容与表格&#xff0c;新建工程直接复制源码就可以得到库 使用实例如下所示&#xff1a; using namespace duckx; duckx::Document doc("file.docx"); doc.open(); //获取当前word中所有的表格 for (auto p doc.tabl…

计算机毕业论文java毕业设计选题源代码基于SSM的会议室预约系统

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 《SSM会议室预约系统》该项目主要解决了会议室预约日常工作中的一些问题&#xff0c;采用技术的技术是jsp springmvcspringmybatis cssjs等。 项目…

ARM 汇编写启动代码之设置栈和调用C语言

一、C语言运行时需要和栈的意义 “C语言运行时&#xff08;runtime&#xff09;”需要一定的条件&#xff0c;这些条件由汇编来提供。C语言运行时主要是需要栈。 C语言与栈的关系&#xff1a;C语言中的局部变量都是用栈来实现的。如果我们汇编部分没有给 C 部分预先设置合理合…