git revert 用法实战:撤销一个 commit 或 merge

news2025/3/27 9:07:58

git revert

1 区别

• 常规的 commit (使用 git commit 提交的 commit)
• merge commit

2 首先构建场景

master上的代码
在这里插入图片描述
dev开发分支上,添加一个a标签,并commit这次提交
在这里插入图片描述
切到master上,再次进行改动和提交
在这里插入图片描述
将dev的代码合到master后,当前的分支图如下所示:

在这里插入图片描述
merge commit 和普通 commit 的不同之处在于:
merge commit 包含两个 parent commit,代表该 merge commit 是从这两个 commit 合并过来的

使用 git log 查看历史提交记录

在这里插入图片描述

也可以使用git show查看这个merge的详细信息

在这里插入图片描述

这代表该 merge commit 是从 81eb85d 和 eod12f6 两个 commit 合并过来的

而常规的 commit 则没有 Merge 行

在这里插入图片描述

3 revert 常规 commit

使用 git revert 即可(commit id是希望删除的Commit ID值)
git 会生成一个新的 commit,会将将定的 commit 内容从当前分支上撤除。

在这里插入图片描述

4 revert merge commit

在这里插入图片描述
但如果直接使用 git revert ,git 也不知道到底要撤除哪一条分支上的内容
这时需要指定一个"主线",主线的内容将会保留,而另一条分支的内容将被 revert

从前面git show的命令中,可以看到,merge commit 的 parent 分别为
• 81eb85d(代表master分支)
• eod12f6(代表dev分支)
在这里插入图片描述
在这里插入图片描述
我们需要保留master分支的内容(主线),将dev分支的内容移除,操作如下:

git revert -m <主线> <commit ID>
git revert -m 1 c0702d261f7be5e93d1b6646d91bec9dabde2a19

因为左边的第一个(81eb85d)式主线,所以,主线为1

代码去掉了上次合并内容:
在这里插入图片描述
分支图如下:

在这里插入图片描述

5 revert之后的重新合并

假设A在自己分支dev上开发功能,并合并到了master,之后 master 上又提交了一个修改 g,这时提交历史如下:

在这里插入图片描述

突然大家发现A的分支存在严重的bug,需要revert掉,于是就把这次合并revert掉了,记为H

在这里插入图片描述

然后A回到自己的分支dev上,修改好了bug,直觉上只需要再次merge到master了就可以,像这样

在这里插入图片描述
但是这不能得到期望的结果,这样合并的结果,并不会包含 c、d的代码,只有 i 的代码 (因为 c 和 d 两个提交曾经被丢弃过)

所以,如果想恢复整个dev分支 所做的修改,应该先把 H revert 掉:

在这里插入图片描述

其中 H" 是对 H 的 revert 操作生成的新 commit,把之前撤销合并时丢弃的代码恢复了回来,然后再 merge 佳怡的分支dev,就可以把解决 bug 写的新代码合并到 master 分支

6 git reset 和 git revert区别

revert再当前版本的基础上新增一个版本,不影响以前的代码在版本四想要回退时在这里插入图片描述
reset该命令会强行覆盖当前版本和要回退的版本之间的其他版本(不太建议)在版本四想要回退时在这里插入图片描述

希望去掉最新的一次commit

在这里插入图片描述

分支图如下,

在这里插入图片描述
git log 查看历史记录

在这里插入图片描述
执行:git reset a7961ff9760e49e5736f7b43794f44ed18b09ce5
从分支图上,可以看到最新的commit记录会被强行覆盖而失去了

在这里插入图片描述
上一次修改的内容,会变成待提交的状态

在这里插入图片描述

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

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

相关文章

修形还是需要再研究一下

最近有不少小伙伴问到修形和蜗杆砂轮的问题&#xff0c;之前虽然研究过一段时间&#xff0c;但是由于时间问题放下了&#xff0c;最近想再捡起来。 之前计算的砂轮齿形是一整段的&#xff0c;但是似乎这种对于有些小伙伴来说不太容易接受&#xff0c;希望按照修形的区域进行分…

AI本地部署之dify

快捷目录 Windows 系统一、环境准备:首先windows 需要准备docker 环1. 安装Docker desktop2. 安装Docker3. 配置Docker 镜像路径4. 配置Docker 下载镜像源5. 重启Docker服务二、Dify 下载和安装1. Dify下载2. Dify 配置3. Dify 安装附件知识:4. Dify创建账号三、下载Ollama d…

安恒春招一面

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…

Python应用指南:利用高德地图API获取POI数据(关键词版)

都说“为一杯奶茶愿意赴一座城”&#xff0c;曾经不知有多少年轻人为了一口茶颜悦色不惜跨越千里来到长沙打卡&#xff0c;而如今也有不少年轻人被传说中的“奶茶界的海底捞”所吸引&#xff0c;千里迢迢来到安徽只为尝一口卡旺卡奶茶。要说起来这卡旺卡奶茶&#xff0c;尽管这…

Linux网络相关概念和重要知识(2)(UDP套接字编程、聊天室的实现、观察者模式)

目录 1.UDP套接字编程 &#xff08;1&#xff09;socket编程 &#xff08;2&#xff09;UDP的使用 ①socket ②bind ③recvfrom ④sendto 2.聊天室的实现 &#xff08;1&#xff09;整体逻辑 &#xff08;2&#xff09;对sockaddr_in的封装 &#xff08;3&#xff09…

JVM 03

今天是2025/03/24 15:21 day 11 总路线请移步主页Java大纲相关文章 今天进行JVM 5,6 个模块的归纳 首先是JVM的相关内容概括的思维导图 5. 优化技术 JVM通过多种优化技术提升程序执行效率&#xff0c;核心围绕热点代码检测和编译优化实现动态性能提升。 热点代码检测 JVM…

【VUE】day07 路由

【VUE】day07 路由 1. 路由2. 前端路由的工作方式3. 实现简易的前端路由4. 安装和配置路由4.1 安装vue-router包4.2 创建路由模块4.3 导入并挂在路由模块 5. 在路由模块中声明路由的对应关系5.1 router-view 1. 路由 在 Vue.js 中&#xff0c;路由&#xff08;Routing&#xf…

内网穿透的应用-本地部署ChatTTS教程:Windows搭建AI语音合成服务的全流程配置

文章目录 前言1. 下载运行ChatTTS模型2. 安装Cpolar工具3. 实现公网访问4. 配置ChatTTS固定公网地址 前言 各位开发者小伙伴们&#xff01;今天我要给大家推荐一个超级火的AI项目——ChatTTS。这个开源文本转语音&#xff08;TTS&#xff09;项目的火爆程度简直让人难以置信&a…

2025-03-21 Unity 网络基础3——TCP网络通信准备知识

文章目录 1 IP/端口类1.1 IPAddress1.2 IPEndPoint 2 域名解析2.1 IPHostEntry2.2 Dns 3 序列化与反序列化3.1 序列化3.1.1 内置类型 -> 字节数组3.1.2 字符串 -> 字节数组3.1.3 类对象 -> 字节数组 3.2 反序列化3.2.1 字节数组 -> 内置类型3.2.2 字节数组 -> 字…

静态时序分析:SDC约束命令set_min_pulse_width详解

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 最小脉冲宽度检查用于确保一个单元的时钟引脚和异步置位/复位引脚的的脉冲宽度满足最小要求&#xff0c;如果违反该要求&#xff0c;则可能出现功能错误。严格意…

推荐1款简洁、小巧的实用收音机软件,支持手机和电脑

聊一聊 没想到现在还有人喜欢听广播。 我一直以为听广播必须要用那种小广播机才可以。 原来手机或电脑上也是可以的。 今天给大家分享一款可以在电脑和手机上听广播的软件。 软件介绍 龙卷风收音机 电台广播收音机分电脑和手机两个版本。 电脑端无需安装&#xff0c;下载…

HO与OH差异之Navigation

在上一篇的内容中我们进一步的了解了Navigation的用法&#xff0c;但是既然写到这里了我就再来扩充一下有关Navigation的内容。 HarmonyOS与OpenHarmony之间有些写法与内容是有差异的&#xff0c;就比如Navigation的跳转。以下内容中HarmonyOS我都简称为HO&#xff0c;OpenHar…

模糊规则激活方法详解(python实例对比)

前文我们已经了解了多种隶属函数&#xff0c;如三角形、梯形、高斯型、S型和Z型&#xff0c;并且讨论了模糊推理的基本过程&#xff0c;包括模糊化、规则评估、聚合和解模糊化。我们还了解了如何生成模糊规则的方法&#xff0c;比如专家经验、聚类分析、决策树、遗传算法和ANFI…

Web前端考核 JavaScript知识点详解

一、JavaScript 基础语法 1.1 变量声明 关键字作用域提升重复声明暂时性死区var函数级✅✅❌let块级❌❌✅const块级❌❌✅ 1.1.1变量提升的例子 在 JavaScript 中&#xff0c;var 声明的变量会存在变量提升的现象&#xff0c;而 let 和 const 则不会。变量提升是指变量的声…

Spring Boot3 配置文件

统一配置文件管理 SpringBoot工程下&#xff0c;进行统一的配置管理&#xff0c;你想设置的任何参数&#xff08;端口号、项目根路径、数据库连接信息等等)都集中到一个固定位置和命名的配置文件&#xff08;application.properties或application.yml&#xff09;中&#xff0…

消防设施操作员考试:巧用时间高效备考攻略

合理规划时间是备考消防设施操作员考试的关键&#xff0c;能让学习事半功倍。​ 一、制定详细时间表​ 根据备考时间和考试内容&#xff0c;制定每日、每周的学习计划。将学习时间合理分配给理论知识学习、技能实操练习和模拟考试。例如&#xff0c;每天安排 3 - 4 小时学习理…

深度学习技术与应用的未来展望:从基础理论到实际实现

深度学习作为人工智能领域的核心技术之一&#xff0c;近年来引起了极大的关注。它不仅在学术界带来了革命性的进展&#xff0c;也在工业界展现出了广泛的应用前景。从图像识别到自然语言处理&#xff0c;再到强化学习和生成对抗网络&#xff08;GAN&#xff09;&#xff0c;深度…

FastStoneCapture下载安装教程(附安装包)专业截图工具

文章目录 前言FastStoneCapture下载FastStoneCapture安装步骤FastStoneCapture使用步骤 前言 在日常工作与学习里&#xff0c;高效截图工具至关重要。本教程将为你呈现FastStoneCapture下载安装教程&#xff0c;助你轻松拥有。 FastStoneCapture下载 FastStone Capture 是一款…

26考研——图_图的遍历(6)

408答疑 文章目录 三、图的遍历图的遍历概述图的遍历算法的重要性图的遍历与树的遍历的区别图的遍历过程中的注意事项避免重复访问遍历算法的分类遍历结果的不唯一性 广度优先搜索广度优先搜索&#xff08;BFS&#xff09;概述BFS 的特点广度优先遍历的过程示例图遍历过程 BFS …

C++类与对象的第一个简单的实战练习-3.24笔记

在哔哩哔哩学习的这个老师的C面向对象高级语言程序设计教程&#xff08;118集全&#xff09;讲的真的很不错 实战一&#xff1a; 情况一&#xff1a;将所有代码写到一个文件main.cpp中 #include<iostream> //不知道包含strcpy的头文件名称是什么,问ai可知 #include<…