【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.hqwc.cn/news/207479.html

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

相关文章

二十二、数组(4)

本章概要 随机生成泛型和基本数组 随机生成 我们可以按照 Count.java 的结构创建一个生成随机值的工具: Rand.java import java.util.*; import java.util.function.*;import static com.example.test.ConvertTo.primitive;public interface Rand {int MOD 10_0…

兼顾陪读|自由职业者赴美国加州大学尔湾分校访学

I老师出国访学除了提升自己的科研水平外,主要目标还是以陪伴孩子上学为主。最终我们为其落实了排名还不错的加州大学尔湾分校的职位,这对于已多年脱离科研工作岗位,学术背景非常薄弱的I老师来说相当不易。 I老师背景: 申请类型&a…

22LLMSecEval数据集及其在评估大模型代码安全中的应用:GPT3和Codex根据LLMSecEval的提示生成代码和代码补全,CodeQL进行安全评估

LLMSecEval: A Dataset of Natural Language Prompts for Security Evaluations 写在最前面主要工作 课堂讨论大模型和密码方向(没做,只是一个idea) 相关研究提示集目标NL提示的建立NL提示的建立流程 数据集数据集分析 存在的问题 写在最前面…

[计算机网络实验]头歌 实验二 以太网帧、IP报文分析(含部分分析)

目录 第1关:Wireshark基本使用入门 【实验目的】 【实验环境】 【本地主机、平台虚拟机之间数据传递】 wireshark基本用法】 1、wireshark主界面 2、抓取分组操作 3、Wireshark窗口功能 4、筛选分组操作 【实验操作】 ​编辑 第2关:Ethernet帧…

关于软raid的实现及常见问题

RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。 磁盘阵列是由很多价格较便宜的磁盘,以硬件(RAID卡)或软件(MDADM&…

[Docker]九.Docker compose讲解

docker-compose 是 docker 官方的一个开源项目,可以实现对 docker 容器集群的快速编排, docker-compose 通过一个 配置文件 来管理多个 Docker 容器,在配置文件中,所有的容器通过 services 来定义,然后使用 docker-compose脚本 来 启动&am…

9、鸿蒙应用桌面图标外观和国际化

一、项目资源目录 项目下的resoueces目录为资源配置目录,其中base为基础配置,即在任何语言环境下都会加载的资源, color.json:用于配置颜色,如页面的背景和文字的颜色。 string.json:用于设置文字&#…

基于单片机声光控智能路灯系统仿真设计

**单片机设计介绍, 基于单片机声光控智能路灯系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的声光控智能路灯系统是一种利用单片机技术实现智能控制的路灯系统。它通过感知环境音量和光照强度…

opengl制作天空盒

首先创建顶点数组 unsigned int m_uiVaoBufferID; glGenVertexArrays(1, &m_uiVaoBufferID); 然后创建顶点缓冲区 float skyboxVertices[] {// positions-1.0f, 1.0f, -1.0f,-1.0f, -1.0f, -1.0f,1.0f, -1.0f, -1.0f,1.0f, -1.0f, -1.0f,1.0f, 1.0f, -1.0f,-1.0f, 1.…

visual studio 如何建立 C 语言项目

安装这个 模块。 新建 空项目 创建完成 写demo 点击运行:

Java如何获取泛型类型

泛型(Generic) 泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。Ada、Delphi、Eiffel、Java、C#、F#、Swift 和 Vis…

合并区间问题

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:intervals [[1,…