GIT的后悔药

版本回退

上篇咱们说过,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.mzph.cn/news/218912.shtml

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

相关文章

mybatis动态SQL-trim

1、建库建表 create database mybatis-example; use mybatis-example; create table emp (empNo varchar(40),empName varchar(100),sal int,deptno varchar(10) ); insert into emp values(e001,张三,8000,d001); insert into emp values(e002,李四,9000,d001); insert into…

C++STL的stack和queue(超详解)

文章目录 前言stack栈的题目最小栈JZ31 栈的压入、弹出序列 stack的模拟实现queue的模拟实现 前言 栈和队列这一块其实有数据结构的基础,学起来非常简单。 stack 栈的成员函数就这么写,除了emplace其他都已经非常熟悉了。 stack没有迭代器吗&#xff…

自控基础理论篇-品质因数与阻尼系数的关系

1.二阶低通滤波系数的标准形式 (a)与阻尼系数相关的标准形式 (b)与品质因数相关的标准形式 比较上式可以分析得到,当A0等于1的时候,阻尼比与品质因素有一个对应关系 2.二阶带通滤波系数的标准形式 (a&…

Halcon一维码识别

文章目录 参数连接halcon 自带案例1(设置校验位识别条码)Halcon 自带案例2(设置对比度识别条码)Halcon 自带案例3(存在曲面变形)Halcon 自带案例4(设置条码扫描线)Halcon 自带案例5&…

数字孪生 5G时代的重要应用场景 - 读书笔记

作者:陈根 第1章:数字孪生概述 数字孪生:对物理世界,构建数字化实体,实现了解、分析和优化集成技术:AI、机器学习、大数据分析构成:传感器、数据、集成、分析、促动器(可以人工干预…

【Pytorch】学习记录分享1——Tensor张量初始化与基本操作

1. 基础资料汇总 资料汇总 pytroch中文版本教程 PyTorch入门教程 B站强推!2023公认最通俗易懂的【PyTorch】教程,200集付费课程(附代码)人工智能_机器 视频 1.PyTorch简介 2.PyTorch环境搭建 basic: python numpy pandas pytroch…

《Effective C++》学习笔记

条款01:把 C 看成一个语言联邦 C由几个重要的次语言构成 C语言:区块,语句,预处理器,数组,指针等等。 类:class,封装,继承,多态......(动态绑定等…

GitHub入门介绍:从小白到大佬的旅程

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

mybatis动态SQL-choose-when-otherwise

1、建库建表 create database mybatis-example; use mybatis-example; create table emp (empNo varchar(40),empName varchar(100),sal int,deptno varchar(10) ); insert into emp values(e001,张三,8000,d001); insert into emp values(e002,李四,9000,d001); insert into…

一、运行时数据区域

根据 《Java 虚拟机规范》的规定,Java 虚拟机所管理的内存将会包括以下截个运行时数据区域,如图所示。 1、程序计数器 程序计数器是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。在 Java 虚拟机的概念模型里&#x…

或许你更胜一筹呢

还记得刚出来时,一位前辈对我说过的一句话,“一定不要妄自菲薄”。说实话,一开始我并不知道这个成语的具体含义。后面百度才知道 妄自菲薄:过分地看轻自己 当时还没毕业,无论是从能力还是学识方面,我都不知…

C#学习笔记 - C#基础知识 - C#从入门到放弃

C# 第1节 C# 简单介绍1.1 C# 是什么1.2 C# 强大的编程功能1.3 C# 发展史1.4 C#与Java区别 第2节 C#程序结构2.1 Hello world2.2 C# 结构解析 第3节 C#基本语法3.1 第1节 C# 简单介绍 1.1 C# 是什么 C# 的发音为“C Sharp”,是一门由微软开发并获得了 ECMA&#xf…

【算法通关村】链表反转经典问题解析

🚩本文已收录至算法学习之旅 一.基础反转 我们通常有两种方法反转链表,一种是直接操作链表实现反转操作,一种是建立虚拟头节点辅助实现反转操作。 力扣习题链接:206. 反转链表 (1) 直接操作实现反转 我们需要一个变量pre来保…

Jmeter接口自动化测试 —— Jmeter变量的使用

​在使用jmeter进行接口测试时,我们难免会遇到需要从上下文中获取测试数据的情况,这个时候就需要引入变量了。 定义变量 添加->配置元件->用户自定义的变量 添加->配置元件->CSV 数据文件设置 变量的调用方式:${变量名} 变量的…

Qt6.5类库实例大全:QWidget

哈喽大家好,我是20YC小二!欢迎扫码关注公众号,现在可免费领取《C程序员》在线视频教程哦! ~下面开始今天的分享内容~ 1. QWidget介绍 QWidget 是 Qt 框架中的一个核心类,用于创建图形用户界面(GUI)应用程序的基本可视…

iic应用篇

一.iic的优点 1. IIC总线物理链路简单,硬件实现方便,扩展性非常好(1个主机控制器可以根据需求增加从机数量,同时删减从机数量也不会影响总线通信);IIC总线只需要SDA和SCL两条信号线,相比于PCI/…

融了超24亿一分钱不花,放银行吃利息,这家存储创企厉害了

​引言:AI与大模型风起云涌,催生了这匹存储“黑马” 【全球存储观察 | 科技热点关注】 这家总部设在美国的存储初创公司,真的赶上AI与大模型时代的风口了。Vast Data公司最新再次获得E轮融资1.18亿美元,但是这个存储…

【MySQL】:表的约束(上)

表的约束 一.非空约束二.default约束三.列描述四.zerofill五.主键1.单个主键2.复合主键 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有…

TrustGeo代码理解(一)main.py

代码链接:https://github.com/ICDM-UESTC/TrustGeo 一、导入各种模块和数据库 # -*- coding: utf-8 -*- import torch.nnfrom lib.utils import * import argparse, os import numpy as np import random from lib.model import * import copy from thop import p…

sillyGirl(傻妞机器人)安装以及对接go-cqhttp(2023年12月)

目录 编写的原因 下载傻妞 注意!!注意!!!注意!!!! 同样的下载go-cqhttp 安装以及配置 go-cqhttp 下载screen 创建go-cqhttp窗口 创建sillyGirl窗口 常见错误 编写…