【DevOps】Git 图文详解(八):后悔药 - 撤销变更

Git 图文详解(八):后悔药 - 撤销变更

  • 1.后悔指令 🔥
  • 2.回退版本 reset
  • 3.撤销提交 revert
  • 4.checkout / reset / revert 总结

发现写错了要回退怎么办?看看下面几种后悔指令吧!

  • ❓ 还没提交的怎么撤销? —— checkoutreset
    • 还未提交的修改(工作区、暂存区)不想要了,用签出指令(checkout)进行撤销清除。
    • 或者用 checkout 的新版回滚指令 reset
  • ❓ 已提交但没有 push 的提交如何撤销?—— resetrevert
  • ❓ 已 push 的提交如何撤销?—— 同上,先本地撤销,然后强制推送 git push origin -f,⚠️注意慎用! 记得先 pull 获取更新。

在这里插入图片描述

1.后悔指令 🔥

指令
描述
git checkout .撤销工作区的(未暂存)修改,把暂存区恢复到工作区。不影响暂存区,如果没暂存,则撤销所有工作区修改
git checkout [file]同上,file 指定文件
git checkout HEAD .撤销工作区、暂存区的修改,用 HEAD 指向的当前分支最新版本替换工作区、暂存区
git checkout HEAD [file]同上,file 指定文件
git reset撤销暂存区状态,同 git reset HEAD,不影响工作区
git reset HEAD [file]同上,指定文件 fileHEAD 可省略
git reset [commit]回退到指定版本,清空暂存区,不影响工作区。工作区需要手动 git checkout 签出
git reset --soft [commit]移动分支 masterHEAD 到指定的版本,不影响暂存区、工作区,需手动 git checkout 签出更新
git reset --hard HEAD撤销工作区、暂存区的修改,用当前最新版
git reset --hard HEAD~回退到上一个版本,并重置工作区、暂存区内容
git reset --hard [commit]回退到指定版本,并重置工作区、暂存区内容
git revert [commit]撤销一个提交,会用一个新的提交(原提交的逆向操作)来完成撤销操作,如果已 push 则重新 push 即可
  • git checkout .git checkout [file] 会清除工作区中未添加到暂存区的修改,用暂存区内容替换工作区。
  • git checkout HEAD .git checkout HEAD [file] 会清除工作区、暂存区的修改,用 HEAD 指向的当前分支最新版本替换暂存区、工作区。
# 只撤销工作区的修改(未暂存)
$ git checkout .
Updated 1 path from the index# 撤销工作区、暂存区的修改
$ git checkout HEAD .
Updated 1 path from f951a96

2.回退版本 reset

reset 是专门用来撤销修改、回退版本的指令,支持的场景比较多,多种撤销姿势,所以参数组合也比较多。简单理解就是移动 master 分支、HEAD 的 “指针” 地址,理解这一点就基本掌握 reset 了。

如下图:

  • 回退版本 git reset --hard v4git reset --hard HEAD~2masterHEAD 会指向 v4 提交,v5v6 就被废弃了。
  • 也可以重新恢复到 v6 版本:git reset --hard v6,就是移动 masterHEAD 的 “指针” 地址。

在这里插入图片描述
reset 有三种模式,对应三种参数:mixed(默认模式)、softhard。三种参数的主要区别就是对工作区、暂存区的操作不同。

  • mixed 为默认模式,参数可以省略。
  • 只有 hard 模式会重置工作区、暂存区,一般用这个模式会多一点。

在这里插入图片描述
穿梭前,用 git log 可以查看提交历史,以便确定要回退到哪个版本。要重返未来,用 git reflog 查看命令历史,以便确定要回到未来的哪个版本。

git reset [--soft | --mixed | --hard] [HEAD]# 撤销暂存区
$ git reset
Unstaged changes after reset:
M       R.md# 撤销工作区、暂存区修改
$ git reset --hard HEAD# 回退版本库到上一个版本,并重置工作区、暂存
$ git reset --hard HEAD~# 回到原来的版本(恢复上一步的撤销操作),并重置工作区、暂存
$ git reset --hard 5f8b961# 查看所有历史提交记录
$ git reflog
ccb9937 (HEAD -> main, origin/main, origin/HEAD) HEAD@{0}: commit: 报表新增导入功能
8f61a60 HEAD@{1}: commit: bug:修复报表导出bug
4869ff7 HEAD@{2}: commit: 用户报表模块开发
4b1028c HEAD@{3}: commit: 财务报表模块开发完成

3.撤销提交 revert

安全的撤销某一个提交记录,基本原理就是生产一个新的提交,用原提交的逆向操作来完成撤销操作。注意,这不同于 resetreset 是回退版本,revert 只是用于撤销某一次历史提交,操作是比较安全的。

在这里插入图片描述
如上图:

  • 想撤销 v4 的修改,执行 git revert v4,会产生一个新的提交 v-4,是 v4 的逆向操作。
  • 同时更新 maserHEAD “指针” 位置,以及工作区内容。
  • 如果已 push 则重新 push 即可。
# revert撤销指定的提交,“-m”附加说明
$ git revert 41ea42 -m '撤销对***的修改'
[main 967560f] Revert "123"1 file changed, 1 deletion(-)

4.checkout / reset / revert 总结

标题 / 指令
checkout
reset
revert
主要作用(撤销)撤销工作区、暂存区未提交修改回退版本,重置工作区、暂存区撤销某一次提交
撤销工作区git checkout [file]git reset HEAD [file]
撤销工作区、暂存区git checkout HEAD [file]git reset --hard HEAD [file]
回退版本git reset --hard [commit]
安全性只针对未提交修改,安全如回退了已 push 提交,不安全安全

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

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

相关文章

Visual Studio连接unity编辑器_unity基础开发教程

Visual Studio连接unity编辑器 问题描述解决方法意外情况 问题描述 当我们在unity编辑器中打开C#脚本的时候发现Visual Studio没有连接unity编辑器,在编写代码的时候也没有unity关键字的提醒。 简单来说就是敲代码没有代码提示。 解决方法 这时候需要在unity中进行…

Qt实现图片旋转的几种方式(全)

目录 一、用手搓(QPainter) 二、使用 QGraphicsView 和 QGraphicsPixmapItem 三、使用 QTransform 实现图像旋转 四、利用 OpenGL 实现旋转图像的效果有几种不同的方法,其中常见的包括: 手动旋转绘制: 使用 QPaint…

网络吞吐量 公网带宽有关吗?

环境: 华为交换机 深信服防火墙 问题描述: 网络吞吐量 公网带宽有关吗? 解决方案: 网络吞吐量网络吞吐量是指在特定时间内通过网络传输的数据量。它衡量了网络设备(如防火墙、交换机、路由器)或网络连…

终端仿真软件 SecureCRT v9.4.2

SecureCRT是一款终端仿真软件,它提供了类似于Telnet和SSH等协议的远程访问功能。SecureCRT专门为网络管理员、系统管理员和其他需要保密访问网络设备的用户设计。 SecureCRT具有以下特点: 安全性:SecureCRT支持SSH1、SSH2、SSL和TLS等加密和…

素短语的定义

素短语,是指至少含有一个终结符的短语,并且除自身外,不包含更小的素短语。 最左素短语是句型中最左边的素短语。

7.HTML中列表标签

7.列表标签 7.1无序列表(重点) 表格是用来显示数据的,那么列表就是用来布局的。 列表最大的特点就是整齐,整洁,有序,他作为布局会更加自由和方便, 根据使用的情景不同,列表可分为三…

数字图像处理(冈萨雷斯)学习笔记

目录 一.机器视觉和计算机视觉二.图像处理基础1.什么是图像2.如何访问图像 三.图像仿射变换四.灰度变换 一.机器视觉和计算机视觉 机器视觉(Machine Vision,MV)和计算机视觉(Computer Vision,CV)的区别和联系: 机器视觉更注重广义图像信号(激光&#xff…

C#中的Fody

在C#中,NuGet里的Fody是一个用于.NET应用程序的代码增强工具。它通过在编译过程中自动织入代码,改变目标程序集的行为。Fody的一个常见用途是简化属性通知的实现,特别适用于WPF绑定。 在WPF中,属性通知是一种机制,用于…

C语言操作符例题

这里写目录标题 例题一题目解析 例题二题目解析 例题三方法一方法二方法三 例题四例题五 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸🥸 C语言 🐿️…

智能指针(Newbie Note)

智能指针专题 1.普通指针的问题2.智能指针是什么什么是所有权 3.智能指针三个好处:4.C11提供的智能指针4.1 shared_ptr(共享所有权指针)4.1.1 分配内存4.1.2 成员函数4.1.3 计数情况汇总:4.1.4 示例代码(计数)4.1.5 示例代码(rese…

Java深拷贝与浅拷贝技术解析及实例演示

摘要:本文将详细介绍Java中的深拷贝和浅拷贝概念,通过分析源码和举例说明,帮助读者更好地理解这两种拷贝方式的区别及应用场景。 一、深拷贝与浅拷贝的概念 深拷贝:复制一个对象后,无论是基本数据类型还是引用类型&…

多柱汉诺塔问题

k柱汉诺塔 题目描述 汉诺塔(Hanoi Tower),又称河内塔。 传说大梵天创造世界的时候做了三根金刚石柱子,按左、中、右排序。大梵天在左侧的柱子上,从下往上按照大小顺序摞着64片黄金圆盘,越靠下的圆盘越大。…

个人博客项目 - 测试报告

文章目录 一、项目背景二、测试报告功能测试1.编写测试用例2.登录测试3.编写文章测试4.查看文章测试5.删除文章测试7.注销登录测试 自动化测试性能测试1.VUG2.进行场景设计3.生成性能测试报告 总结 本文开始 一、项目背景 通过学习测试相关的知识,动手实践并测试一…

2023 年 亚太赛 APMCM ABC题 国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 以五一杯 A题为例子,以下是咱们做的一些想法呀&am…

【Vue】自定义指令

自定义指令 自定义指令就是自己定义的指令,是对 DOM 元素进行底层操作封装 ,程序化地控制 DOM,拓展额外的功能 全局定义 Vue.directive(指令名字, definition) 指令名:不包括v-前缀,使用时候包括v-,v-指令名defini…

CUTLASS 1.3.3中的 Volta884_h884gemm

CUTLASS 是 CUDA C 模板抽象的集合,用于在 CUDA 内的所有级别和规模上实现高性能矩阵-矩阵乘法 (GEMM) 和相关计算。它采用了类似于 cuBLAS 和 cuDNN 中实现的分层分解和数据移动策略。 CUTLASS 最新版本为3.3,相比1.3.3变动较大。然而重温一下1.3.3仍然…

生产问题 Recv-Q101

生产上服务端口 Recv-Q101 新请求到服务器的失败,幸好及时发现,通过重启服务之后得到解决,具体原因等待排查 目前觉得的原因是:某些请求暂用时间比较久

Linux超简单部署个人博客

1 安装halo 1.1 切换到超级用户 sudo -i 1.2 新建halo文件夹 mkdir ~/halo && cd ~/halo 1.3 编辑docker-compose.yml文件 vim ~/halo/docker-compose.yml 英文输入法下,按 i version: "3"services:halo:image: halohub/halo:2.10container_…

2017年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

文章目录 2017 级考研管理类联考数学真题解析一、问题求解(本大题共 5 小题,每小题 3 分,共 45 分)下列每题给出 5 个选项中,只有一个是符合要求的,请在答题卡上将所选择的字母涂黑。真题(2017-…

Python 提高篇学习笔记(一):深拷贝和浅拷贝

文章目录 一、什么是对象的引用二、深拷贝和浅拷贝2.1 浅拷贝(Shallow Copy)2.2 深拷贝(Deep Copy)2.3 copy.copy和copy.deepcopy的区别 一、什么是对象的引用 在 Python 中,对象的引用是指变量指向内存中某个对象的地址或标识符。当你创建一个新的对象(比如一个整…