GIT的后悔药

news2024/10/7 3:14:22

版本回退

上篇咱们说过,GIT能够管理文件的历史版本,这也是版本控制器重要的能力。如果有一天你发现之前做的工作出现很大问题,需要在某个特定的历史版本重新开始,这个时候,就需要版本回退的功能了。
执行git reset命令用于回退版本,可以指定退回到某一次提交的版本。”回退“本质是将版本库中的内容进行回退,工作区和暂存区是否回退有命令参数决定。
git reset命令的语法格式:git reset [--soft | --mixed | --hard] [HEAD]

  • --mixed为默认选项,使用时可以不用带该参数。该参数将暂存区的内容回退到指定提交版本内容,工作区文件保证不变。
  • --soft参数对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本
  • --hard参数将暂存区与工作区都回退到指定版本,切记工作区有未提交的代码时不要使用该参数,因为工作区会回滚,你没有提交的代码就再也找不回了。
  • HEAD说明:
    • 可以直接写成commit id,表示回退到指定版本
    • HEAD 表示当前版本
    • HEAD^ 表示上一个版本
    • HEAD^^ 表示上上一个版本,以此类推
    • HEAD~0 表示当前版本
    • HEAD~1 表示上一个版本
    • HEAD^2 表示上上一个版本,以此类推

为了演示版本回退,咱们先更新三个版本,并分别进行3次提交。
image.png
咱们使用git log --pretty=oneline来查看一下历史提交记录
image.png
如果在提交完version3后,发现version3编写错误,想回退到version2,重新基于version2开始编写。

由于我们希望将工作区的内容也回退到version2版本,所以需要使用--hard参数

image.png
此时我们使用git log查看一下提交日志,发现HEAD指向version2
image.png
值得一提的是,GIT的版本回退速度非常快,因为GIT在内部有一个指向当前分支(此处是master分支)的HEAD指针,refs/heads/master文件中保存当前master分支的最新commit id。当我们在回退版本的时候,Git仅仅是给refs/heads/master中存储一个特定的version,示意图如下
image.png
如果此时先要从version2回到version3要怎么做呢?

只需要知道version3的commit id

但此时使用git log命令无法打印出version 3的commit id,运气好的话还可以在终端上查找到之前的记录,运气不好的话commit id已经被丢弃了。好在Git为我们提供了git reflog命令,该命令用来记录本地的每一次命令
image.png
我们发现打印出来的commit id比以前短了,但是没关系,GIT版本回退的时候,也可以使用部分commit id来代表目标版本
image.png

撤销修改

如果我们在工作区写了很长时间的代码,越写越写不下去,觉得写的代码太垃圾,想恢复到上一个版本。

情况1:工作区的代码还未add

你当然可以直接删除掉你目前在工作区新增的代码,但是当你写了很多代码,就没有办法分辨出哪些代码是新增的。当然你可以使用git diff查看差别在哪,但是这样效率太低了,而且容易改错了。
Git为我们提供了更好的方式,使用git checkout --[file]命令让工作区的文件回退到最近一次addcommit时的状态。
image.png

情况2:已经add,但没有commit

我们可以使用git reset回退命令,参数设置为--mixed(可以不写),将暂存区的内容回退到指定的版本内容,工作区保持不变。
image.png

情况3:已经add,并且也commit

我们可以使用git reset --hard HEAD^回退到上一个版本!前提条件是你还没把代码推送到远程仓库中。
image.png

删除文件

在Git中删除也是一个修改操作,将已经提交过的file2文件删除要怎么处理呢?
image.png
我们直接使用rm -rf删除file2文件是没有用的,通过git status会告诉你哪些文件被删除了。此时,工作区和版本库不一致,要删除文件,不但要删除工作区的文件,还要删除版本库的文件。
走到这里有两种情况

  1. 不小心删错了
  2. 确实要从版本库中删除该文件

对于第一种情况,可以使用git checkout -- file2回退到删除前。
对于第二种情况,很明显我们没有删除干净,我们只删除了工作区的文件,需要使用git rm将文件从暂存区和工作区中删除,并且commit
image.png

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

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

相关文章

【数据结构(十二·图)】图的相关知识(包括深度优先遍历和广度优先遍历)

文章目录 1. 图的基本介绍1.1. 图的举例说明1.2. 图的常用概念 2. 图的表示方式2.1. 邻接矩阵2.2. 邻接表 3. 应用案例4. 图的遍历4.1. 深度优先遍历4.1.1. 基本思想4.1.2. 算法步骤4.1.3. 代码实现 4.2. 广度优先遍历4.2.1. 基本思想4.2.2. 算法步骤4.2.3. 代码实现 4.3. 图的…

跨域解决方案详解

文章目录 同源策略PostMessageWebsocket跨域资源共享(CORS)两种请求简单请求基本流程withCredentials 属性 需预检的请求预检请求预检请求的回应浏览器的正常请求和回应示例 Nginx反向代理Node中间件代理搭建node代理服务使用现成的node代理服务 JSONP前…

PhotoMaker——通过堆叠 ID 嵌入定制逼真的人像照片

论文网址链接:https://arxiv.org/abs/2312.04461 详情网址链接:PhotoMaker 开源代码网址链接:GitHub - TencentARC/PhotoMaker: PhotoMaker 文本到图像AI生成的最新进展在根据给定文本提示合成逼真的人类照片方面取得了显着进展。然而&#…

opencv,C++中cv下的函数都无法解释,并且报错为链接器工具错误 LNK2001

检查链接器中的附加依赖项目 opencv_word4.81.lib (release 版本) opencv_word4.81d.lib (debug 版本) 要和这里相对应,不然就会报连接器的错误。

快速二维相位解包算法基于按照非连续路径进行可靠性排序

Miguel Arevallilo Herra ez, David R. Burton, Michael J. Lalor, and Munther A. Gdeisat 摘要: 据我们所知,我们描述了一种新的相位展开技术。已经提出了几种基于首先展开最可靠像素的算法。这些仅限于连续路径,并且在定义起始像素时会遇…

[BUUCTF 2018]Online Tool1

提示 利用nmap上传文件 首先进行代码分析: 首先是进行判断http信息头里是否在HTTP_X_FORWARDED_FOR并且是否有参数 $_SERVER[“HTTP_X_FORWARDED_FOR”] 的值才是客户端真正的IP(如果是多层代理,该值可能是由客户端真正IP和多个代理服务…

VLAN详细学习

文章目录 VLAN概念VLAN种类端口VLAN工作原理以太网的三种链路类型配置 VLAN概念 一种讲局域网设备从逻辑上划分为一个个网段,从而实现虚拟网络的一种技术,这一技术主要应用于交换机中。Vlan技术是技术在以太网帧的基础上增加vlan头,用VLAN I…

Esxi虚拟机无法添加加密狗处理

原创作者:运维工程师 谢晋 Esxi虚拟机无法添加加密狗处理 前提纪要添加直通模式 前提纪要 客户将加密狗插在Esxi主机上,并给虚拟机添加USB控制器再添加加密狗设备,但添加时候报错无法识别加密狗(如下图)&#xff0…

UDP分片与丢包,UDP真的比TCP高效吗?

一、UDP 报文格式 每个 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长(2 字节)字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值。 UDP 报文格式如图所示。 UDP 报文中每个字段的含义如下: 源端…

【力扣】2.两数相加

2.两数相加 这是第二题,还行豁~。 题解: 首先就是对题目的理解。这里你要知道两链表中数字的排列都是逆序的,也就是说示例一中2-4-3他原本的数字应该是342。同理可得下面链表的意思,二者相加所得到的结果也是逆序的,…

boost编译静态库

版本1_83_0 下载地址https://boostorg.jfrog.io/artifactory/main/release/1.83.0/source/boost_1_83_0.zip 解压后根目录可见 参考方式:打开index.html 可通过此路径找到编译方法 进入getting started,右下角有linux和windows的下一步可选&#xff0…

探索云测试的方法:优化软件质量的新趋势

随着云计算技术的不断发展,云测试成为提高软件质量和效率的关键方法之一。本文将介绍一些云测试的方法,以帮助团队更好地应对不同的测试需求和挑战。 1. 云测试环境搭建 传统测试中,搭建测试环境可能需要大量的时间和资源。云测试通过提供可扩…

C++面向对象(OOP)编程-友元(友元函数和友元类)

本文主要介绍面向对象编程的友元的使用,以及友元的特性和分类,提供C代码。 1 为什么引进友元 面向对象编程(OOP)的三大特性中的封装,是通过类实现对数据的隐藏和封装。一般定义类的成员变量为私有成员,成员…

中伟视界:水位识别、智能化巡检、远程监控,提升智慧河道管理效率

随着现代科技的发展,人工智能(AI)算法在各行各业中的应用越来越广泛。特别是在水利行业中,智慧河道的运营管理已成为了一个重要的课题。本文将探讨如何利用AI算法优化智慧河道的运营效率,以及如何通过水位识别视频分析…

《Kafka权威指南》读书笔记

《Kafka权威指南》第一、三、四、六章,是重点。可以多看看。 一、 Kafka的组成 kafka是一个发布与订阅消息系统消息:kafka的数据单元称为"消息"。可以把消息看成是数据库中的一个"数据行"。 消息的key:为key生成一个一…

指定安装nginx版本链接

Index of /packages/centos/7/x86_64/RPMS/ (nginx.org) 找到想要下载的对应版本直接下载 rpm -ivh http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.24.0-1.el7.ngx.x86_64.rpm 查看nginx信息 rpm -qa nginx rpm -qi nginx 命令rpm -ivh是Linux系统中的一种用于…

SELinux介绍

本章主要介绍在RHEL8中如何使用 SELinux。 了解什么是 SELinux了解 SELinux 的上下文配置端口上下文了解SELinux的布尔值了解SELinux的模式 在 Windows系统中安装了一些安全软件后,当执行某个命令时,如果安全软件认为这个命令对系统是一种危害&#…

IPO观察丨“氢风”徐来之际,国鸿氢能会是下一个宁德时代吗?

继亿华通之后,港股又迎来了一家氢能源企业。 近日,氢燃料电池电堆研发商国鸿氢能科技(嘉兴)股份有限公司(以下简称“国鸿氢能”)在香港交易所主板挂牌上市。 具体来看,国鸿氢能立足于一个前景…

企业首选的免费开源供应链管理协作系统功能应用介绍

本文节选自Odoo亚太金牌服务机构【开源智造】所编写的《Odoo最佳业务解决方案》如需获取完整的知识内容,请至开源智造官网免费获取。感谢网友一键三连:点赞、转发、收藏,您的支持是我们最大的前进动力! 供应链协作 用Odoo供应链协…

紫光展锐CEO任奇伟博士:展锐5G芯筑基当下,迈向未来

12月5日,紫光集团执行副总裁、紫光展锐CEO任奇伟博士受邀出席2023世界5G大会5G产业强基发展论坛,发表了题为《展锐5G芯:筑基当下,迈向未来》的演讲。 ​ 世界5G大会由国务院批准,国家发展改革委、科技部、工信部与地方…