Git撤销已合并提交的多种姿势

news2024/11/25 4:21:55

#Git撤销已合并提交的多种姿势

在Git中,合并分支是一个常见的操作,但有时候可能会意外地将错误的提交合并到了主分支。这时候需要撤销已合并的提交并恢复到正确的状态。本文将介绍的是如何在Git中撤销已合并的提交,无论这个提交记录是最新的还是中间的某一个。

撤销最新合并的一次提交

如果要撤销最新的合并提交,可以使用git revert命令来创建一个新的提交,撤销错误的变更。

  1. 首先使用git log命令查看提交历史,找到最新的合并提交。

$ git log
commit c3d2e9a4e2a1e285ff4d8f06e01d4e3f19b532ea (HEAD -> master)
Author: Hanmeimei <hanmeimei@example.com>
Date:   Fri Jun 30 15:26:43 2023 +0800

    Incorrect merge commit

commit 3e5fb8a7b631eb6492ef32e28a813084d4d3de2b
Author: Lilei <Lilei@example.com>
Date:   Thu Jun 29 18:20:56 2023 +0800

    Correct commit

...

在上面的示例中,大家可以看到最新的错误合并提交(Incorrect merge commit)。

  1. 使用git revert命令撤销合并提交,并创建一个新的提交来还原到正确的状态。

$ git revert c3d2e9a4e2a1e285ff4d8f06e01d4e3f19b532ea

Git将自动创建一个新的提交,撤销错误的合并提交。

  1. 使用git loggit show命令验证新的提交历史,确认错误的变更已经被撤销。

$ git log
commit b254d0f063b4ab4e7b78fb42015e0c55e0e98712 (HEAD -> master)
Author: Hanmeimei <hanmeimei@example.com>
Date:   Fri Jun 30 15:46:28 2023 +0800

    Revert "Incorrect merge commit"

    This reverts commit c3d2e9a4e2a1e285ff4d8f06e01d4e3f19b532ea.

commit 3e5fb8a7b631eb6492ef32e28a813084d4d3de2b
Author: Lilei <lilei@example.com>
Date:   Thu Jun 29 18:20:56 2023 +0800

    Correct commit

...

在这里可以看到一个新的提交(Revert "Incorrect merge commit")被创建,它撤销了最新的错误合并提交。

撤销最新合并的多次提交

如果要撤销最新合并的多次提交,可以使用git reset命令来回滚到某次提交。以下是步骤:

  1. 首先使用git log命令查看提交历史,找到要回滚的哈希值。

$ git log
commit c5b890eee2edf9a353ec6bba0543e41d2529a8f8 (HEAD -> master)
Author: Hanmeimei <hanmeimei@example.com>
Date:   Mon Jul 3 15:12:10 2023 +0800

    Incorrect merge commit

commit 82bcf43083a4dc8c87091ebde4dd5374f0c6e274
Author: Hanmeimei <hanmeimei@example.com>
Date:   Mon Jul 3 15:11:54 2023 +0800

    Incorrect merge commit2
    
commit 60a52b00d0ee2703156231e209e8aad115919aee
Author: Hanmeimei <hanmeimei@example.com>
Date:   Mon Jun 26 06:32:35 2023 +0000

    Correct commit

...

在这里需要回滚到(Correct commit)。

  1. 使用git reset 命令撤销合并提交,并创建一个新的提交来还原到正确的状态。

$ git reset --soft 60a52b00d0ee2703156231e209e8aad115919aee // 暂存区
$ git reset --hard 60a52b00d0ee2703156231e209e8aad115919aee // HEAD 指向此次提交记录
$ git push origin HEAD --force // 强制推送远端

注意:此次提交之后的修改不做任何保留,git status查看工作区是没有记录的。

  1. 最后,使用git loggit show命令验证提交历史,确认错误的变更已经被撤销。

$ git log
commit 60a52b00d0ee2703156231e209e8aad115919aee (HEAD -> master)
Author: Hanmeimei <hanmeimei@example.com>
Date:   Mon Jun 26 06:32:35 2023 +0000

    Correct commit

...

如果出现了误删,可以用以下办法来恢复:

$ git reset --hard 82bcf43083a4dc8c87091ebde4dd5374f0c6e274 // 误删的哈希值

 HEAD is now at 82bcf4308 feat: Incorrect merge commit2
 
$ git push origin HEAD --force // 强制推送远端

撤销中间合并某一个提交

如果要撤销中间的某一个合并提交,可以使用git revert命令,并指定要撤销的提交哈希值。

  1. 首先使用git log命令查看提交历史,并找到要撤销的中间合并提交。

$ git log
commit 3e5fb8a7b631eb6492ef32e28a813084d4d3de2b (HEAD -> master)
Author: Lilei <lilei@example.com>
Date:   Wed Jun 21 12:00:00 2023 +0000

    Correct commit
    
commit a1b2c3d4e5f6a7b8c9d0e1f2g3h4i5j6k7l8m9n0
Author: Hanmeimei <hanmeimei@example.com>
Date:   Fri Jun 18 12:00:00 2023 +0000

    Incorrect merge commit
    
...

在这里可以看到一个中间的错误合并提交(Incorrect merge commit)。

  1. 然后使用git revert命令撤销合并提交,并创建一个新的提交来还原到正确的状态。

$ git revert a1b2c3d4e5f6a7b8c9d0e1f2g3h4i5j6k7l8m9n0

Git将自动创建一个新的提交,撤销错误的合并提交。

  1. 最后使用git loggit show命令验证新的提交历史,确认错误的变更已经被撤销。

$ git log
commit b254d0f063b4ab4e7b78fb42015e0c55e0e98712 (HEAD -> master)
Author: Hanmeimei <hanmeimei@example.com>
Date:   Mon Jun 28 12:10:00 2023 +0000

    Revert "Incorrect merge commit"

    This reverts commit a1b2c3d4e5f6a7b8c9d0e1f2g3h4i5j6k7l8m9n0.

commit 3e5fb8a7b631eb6492ef32e28a813084d4d3de2b
Author: Lilei <lilei@example.com>
Date:   Wed Jun 21 12:00:00 2023 +0000

    Correct commit
    
commit a1b2c3d4e5f6a7b8c9d0e1f2g3h4i5j6k7l8m9n0
Author: Hanmeimei <hanmeimei@example.com>
Date:   Fri Jun 18 12:00:00 2023 +0000

    Incorrect merge commit

...

可以看到之前的提交仍会保留在git log中,而此次撤销会做为一次新的提交(Revert "Incorrect merge commit")。

注意

在执行撤销操作之前,请一定要确保你了解操作的后果,并在进行任何更改之前创建备份或保存重要的数据。

- END -

关于奇舞团

奇舞团是 360 集团最大的大前端团队,代表集团参与 W3C 和 ECMA 会员(TC39)工作。奇舞团非常重视人才培养,有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。

674c30eac365c8a69f26f440bb362217.png

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

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

相关文章

包管理工具:npm

安装Node的过程会自动安装npm工具 比如npm install dayjs后 const dayjsrequire("dayjs")console.log(dayjs()) 直接运行 生成package.json文件  方式一&#xff1a;手动从零创建项目&#xff0c;npm init –y  方式二&#xff1a;通过脚手架创建项目&#xf…

Sentinel服务器容错简介

spring gateway 详解 服务容错高并发带来的问题服务雪崩效应常见容错方案常见的容错思路1、隔离2、超时3、限流4、熔断5、降级 常见的容错组件 SentinelSentinel 具有以下特征:Sentinel概念和功能相关概念1、资源2、规则 重要功能 服务容错 高并发带来的问题 在微服务架构中&…

Vivado使用误区与进阶系列(七)用Tcl定制Vivado设计实现流程

01 基本的FPGA设计实现流程 FPGA 的设计流程简单来讲&#xff0c;就是从源代码到比特流文件的实现过程。大体上跟 IC 设计流程类似&#xff0c;可以分为前端设计和后端设计。其中前端设计是把源代码综合为对应的门级网表的过程&#xff0c;而后端设计则是把门级网表布局布线到…

orcle报错:TNS 监听程序无法为请求的服务器类型找到可用的处理程序

orcle报错&#xff1a;TNS 监听程序无法为请求的服务器类型找到可用的处理程序 方法一&#xff1a;配置文件修改 服务端的数据库是专用服务器,但是在客户端的tnsname.ora里配置中设置了连接方式为shared,这种情况下打开tnsnames.ora, 找到安装orcle的安装目录&#xff0c;点…

MSP430F5529,超声波,距离检测报警,倒车雷达,SR-04模块

文章目录 硬件连接功能实物效果代码 硬件连接 /* OLED----MSP430VCC-----3.3VGND-----GNDSCL------P3.1SDA------P3.0 */ /* 蜂鸣器----MSP430VCC-----3.3VGND-----GNDDAT------P2.4 */ /* 超声波----MSP430VCC-----3.3VGND-----GNDTRIG------P1.3ECHO------P1.2 */ /* …

模板学堂|数据关系和AntV、ECharts图表解析

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场&#xff08;https://dataease.io/templates/&#xff09;。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板&#xff0c;方便用户根据自身的业务需求和使用场景选择对应的仪表板模板&#xff0c;并…

PHP 音乐欣赏网站mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP音乐欣赏网站 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/88041034https://download.…

Sentry 监控 Docker 方式部署

一、简介 根据主篇 Sentry 监控部署与使用 流程&#xff0c;使用 Docker 方式 方式进行部署。 docker 方式 部署操作比较简单&#xff0c;也是 Sentry 官方 比较推崇的方式&#xff0c;直接按 Sentry On-Premise 提供的方式按部就班部署就好了。或者可直接参考 Docker 部署 Se…

关于根据文件名以及内容查找文件存放路径

1 根据文件名字查找文件存放路径 1.1 命令如下&#xff08;先切换到存放该文件的顶级父目录下&#xff09;&#xff1a; find /path/to/search -name "filename"​​ 1.2 案例如下 2 根据内容查找包含该内容的文件存放路径 2.1 命令如下&#xff08;先切换到存放该文…

《大大简化每次运行bochs的命令行》ubuntu里安装vscode + makefile文件基本编写 + shell命令

&#x1f4cd;安装vscode 启动vscode 如图打开商店&#xff0c;在搜索栏里输入visual studio code&#xff0c;安装即可 在随便一个命令行里输入code即可打开vscode &#x1f4cd;makefile文件基本编写 在实验项目文件夹里创建makefile文件&#xff08;vscode直接能快捷创…

禁止22H2版windows10出现windows11的跨版本升级提示

近期微软为了强推windows11&#xff0c;笔者所用的笔记本又出现了升级windows11的提示&#xff0c;烦人不说&#xff0c;还担心一不小心点错了&#xff0c;系统就给升了&#xff0c;赶紧禁止了跨版本升级&#xff0c;相关设置记录如下&#xff1a; 一、问题情况 系统出现了升…

[C++] C++特殊类设计 以及 单例模式:设计无法拷贝、只能在堆上创建、只能在栈上创建、不能继承的类, 单例模式以及饿汉与懒汉的场景...

特殊类 1. 不能被拷贝的类 注意, 是不能被拷贝的类, 不是不能拷贝构造的类. 思路就是 了解什么时候 会以什么途径 发生拷贝, 然后将路堵死. 拷贝发生一般发生在 拷贝构造 和 赋值重载 所以, 只要把类的这两个成员函数堵死, 此类就不能拷贝了 C98 在C11之前, 可以通过这种方…

基于Javaweb实现ATM机系统开发实战(六)开卡用户登录及其功能实现

首先输入用户名密码&#xff0c;测试一下用户登录功能&#xff0c;跳转到了UserLogin页面&#xff0c;发现404&#xff0c;是因为我们的servlet还没有编写&#xff0c;页面无法进行跳转。 还是老规矩&#xff0c;先写servlet&#xff1a; package com.atm.servlet;import com…

计算机网络实验(4)--配置网络路由

&#x1f4cd;实验目的 了解路由器的特点、基本功能及配置方法&#xff1b;使用模拟软件Packet Tracer 5.3熟悉Cisco路由器的操作&#xff1b;配置静态路由和距离矢量路由协议RIP&#xff0c;实现给定网络的连通&#xff1b;从而加深对IP编址、路由转发机制、路由协议、路由表…

作为一个程序员一定要掌握的算法之遗传算法

目录 一、引言 1.1 目的 1.2 意义 二、遗传算法介绍 2.1 遗传算法的基本思想 2.2 遗传算法与其他算法的主要区别 2.3 基于Java的遗传算法设计思想 三、遗传算法的具体实现 3.1 系统功能模块图和说明 3.2 代码和说明 3.2.1 初始化 3.2.2 选择运算 3.2.3 交叉运算 3…

go语言 Sort包

Sort包 1.常见的类型进行排序 类型功能sort.Float64s([]float64)对float64切片进行升序排序sort.Float64sAreSorted([]float64)bool判断float64切片是否为升序sort.SearchFloat64s([]float64,float64)int在升序切片中查找给定值,找到则返回下标,找不到则返回适合插入值的下标 …

selenium+python做web端自动化测试框架实战

最近受到万点暴击&#xff0c;由于公司业务出现问题&#xff0c;工作任务没那么繁重&#xff0c;有时间摸索seleniumpython自动化测试&#xff0c;结合网上查到的资料自己编写出适合web自动化测试的框架&#xff0c;由于本人也是刚刚开始学习python&#xff0c;这套自动化框架目…

基于 FPGA 的 HDMI/DVI 显示

文章目录 前言一、HDMI 与 DVI 的区别与联系1.1 DVI 接口含义1.2 HDMI 接口含义1.3 HDMI 与 DVI 的区别1.4 HDMI 与 DVI 的兼容性1.5 HDMI 与 DVI 接口对比 二、DVI 数据链路介绍2.1 输入接口层2.2 TMDS 发送器2.3 TMDS 接收器2.4 输出接口层 三、传输原理与实现3.1 TMDS原理3.…

jvm调优工具详解

一、调优工具 先通过jps命令显示Java应用程序的进程id 1、jmap 查看堆实例个数及占用内存大小&#xff0c;把这些信息生成到当前目录下的log.txt文件 jmap -histo 21932 > ./log.txt #查看历史生成的实例 jmap -histo:live 14660 #查看当前存活的实例&#xff0c;执行…

跨浏览器测试的重要性及需要注意的问题

随着互联网的快速发展&#xff0c;人们使用各种不同的浏览器来访问网站。因此&#xff0c;跨浏览器测试变得尤为重要&#xff0c;以确保网站在各种浏览器上都能正常运行和显示。本文将探讨跨浏览器测试的重要性以及需要注意的问题。 一、跨浏览器测试的重要性 随着浏览器的多…