git revert操作引起的代码丢失以及解决方案

news2025/1/11 23:43:20

场景如下:

  1. 某项目下有很多开发中的分支,比如分支a,b,c,d都合并到了一个test分支上;
  2. 某次误操作将test分支内容合到了分支e上,然后紧接着又revert了这次合并,试图撤销合并;
  3. 接着将分支e合并master上线;
  4. 过了若干天,将master再合并到a,b,c,d分支上时,发现之前修改的代码被合并丢掉了。

这时候你会纳闷,为什么代码会丢掉,关于git revert的操作解释如下:

  • 创建一个新的提交:当你对某个提交(或一系列提交)执行 git revert 时,Git 会创建一个新的提交,这个新提交包含了对指定提交所做更改的“逆操作”。换句话说,它尝试将指定提交中的所有更改都“撤销”掉。
  • 保留原始提交:与 git reset 或 git rebase 不同,git revert 不会修改或删除原始提交。原始提交仍然保留在 Git 历史中,但新提交的更改会撤销它的效果。
  • 保持历史的线性(如果可能):默认情况下,git revert 会尝试在当前分支的顶部创建一个新的提交来撤销指定提交。这有助于保持历史记录的线性,尤其是在与远程仓库共享代码时。然而,如果指定的提交不是当前分支历史的一部分(例如,如果你试图从一个分支上撤销另一个不相关分支的提交),你可能需要使用额外的选项(如 --mainline)来确保正确的行为。
  • 处理合并冲突:如果撤销的提交与当前分支的更改有冲突,git revert 会停止并让你手动解决这些冲突。解决冲突后,你需要像处理任何其他合并冲突一样提交结果。
  • 影响未来的合并:由于 git revert 创建了一个新的提交来撤销原始提交的效果,这会影响未来的合并操作。如果将来某个分支(如 master)再次合并包含原始提交的分支(如 a, b, c, d),那么合并将包括原始提交和新的撤销提交。然而,由于撤销提交的存在,原始提交的效果将被抵消,因此在合并后的结果中不会看到这些更改。
  • 对公共仓库的影响:如果你已经将包含原始提交的更改推送到了公共仓库,并且想要撤销这些更改,你需要首先在你的本地仓库中执行 git revert,然后将包含新撤销提交的更改推送到远程仓库。这将确保所有与你有共享历史的协作者都能看到并接收到你的撤销操作。

总结:git revert确实可以撤销合并,但是会保留撤销的记录,再去合并相关分支时,就会出现代码丢失的情况!

解决方案:

  1. 最笨的办法,记住你分支的每次修改记录,手动补上这些代码,慢而且可能漏代码
  2. git reset到上述误操作2之前的一次提交记录,将这几天的合并master操作再重新操作一次,适用于后续合并master操作不多的情况
  3. 另辟蹊径将a、b、c、d、e的撤销的代码以简单快速并且完整的方式保留。

以a分支举例,当前在a分支,合并master后发现部分代码丢失,操作如下:

(1)先撤销合并master

git reflog

找到merge或者rebase的前一个节点

git reset --hard <commit_hash>

(2) 找到你分支a创建前的一次提交点,并以此提交点创建新分支,

git log
# 找到提交hash,以此提交点新建分支
git branch 新分支名 提交哈希值

比较分支a,将a分支原本的全部修改记录,使用git cherry-pick操作拉到【新分支】上
(3)将master分支merge到新分支上
这样操作快速方便也不怕代码丢失,如果不放心可以最后再比较下master分支,看看差异化的是否为原分支a的修改记录

如果您对技术有兴趣,友好交流,可以加v进技术群一起沟通,v:zzs1067632338,备注csdn即可

在这里插入图片描述

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

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

相关文章

如何解决Windows虚拟机不能安装vmtools的问题?

今天学到个小tips给大家分享一下&#xff01;&#xff01;&#xff01;解决win7安装不了vmtools的问题&#xff0c;以及如何打补丁&#xff01; 大家有没有遇到过下面的问题&#xff0c;就是在再给win7装vmtools的时候无法安装的情况&#xff0c;我这里这个是win7的旗舰版就遇…

Google Ads投放 | 如何分析竞争对手的谷歌广告?

Google Ads广告投放是出海企业的必重要营销动作之一&#xff0c;而分析竞争对手的 Google 广告是优化您自己的广告策略的关键步骤。通过了解竞争对手的动向&#xff0c;您可以发现改进的机会并在竞争中保持领先地位。 今天整理了Google Ads 竞争对手分析的4种方法&#xff1a; …

Linux基础知识学习(五)

1. 用户组管理 每个用户都有一个用户组&#xff0c;系统可以对一个用户组中的所有用户进行集中管理&#xff08;开发、测试、运维、root&#xff09;。不同Linux 系统对用户组的规定有所不同&#xff0c;如Linux下的用户属于与它同名的用户组&#xff0c;这个用户组在创建用户…

技术速递|将 .NET Aspire 添加到您现有的 .NET 应用程序中

作者&#xff1a;Jon Galloway 排版&#xff1a;Alan Wang .NET Aspire 是一个针对 .NET 的新型云就绪堆栈&#xff0c;可帮助开发人员快速轻松地开发分布式应用程序。您可能已经看过一些演示&#xff0c;展示了大型 .NET 解决方案&#xff0c;其中充满了复杂的云依赖项&#x…

租房网站

TOC springboot0762租房网站 JAVA简介 Java主要采用CORBA技术和安全模型&#xff0c;可以在互联网应用的数据保护。它还提供了对EJB&#xff08;Enterprise JavaBeans&#xff09;的全面支持&#xff0c;java servlet API&#xff0c;Java&#xff08;java server pages&…

在家上班,躺着收钱?分享远程工作程序员的真实生活……

这是《开发者说》的第15期&#xff0c;与以往采访的活跃于各行各业的开发者不同&#xff0c;这次我们将目光投向了优秀的远程开发者&#xff0c;本栏目将分享自由远程工作者的经历、见解和故事&#xff0c;希望能给大家带来一些崭新的视角。 这次我们邀请到的是拥有10年开发经…

秃姐学AI系列之:AlexNet + 代码实现

目录 深度学习之前的网络 机器学习 几何学 特征工程 总结 深度卷积神经网络的突破的两个关键因素 数据 ImageNet&#xff08;2010&#xff09; 硬件 90年&#xff1a;数据量和计算能力发展的均匀且都不大的时候——神经网络 00年&#xff1a;内存不错、算力也不错&a…

秃姐学AI系列之:使用块的网络——VGG

目录 VGG VGG块 VGG架构 总结 模型演变进度 代码实现 QA VGG 上文讲的 AlexNet 虽然证明了深层神经网络卓有成效&#xff0c;但它没有提供一个通用的模板来指导后续的研究人员设计新的网络。 与芯片设计中工程师从放置晶体管到逻辑元件再到逻辑块的过程类似&#xff0c…

AI大模型独角兽 MiniMax 基于 Apache Doris 升级日志系统,PB 数据秒级查询响应

作者&#xff1a;MiniMax 基础架构研发工程师 Koyomi、香克斯、Tinker 导读&#xff1a;早期 MiniMax 基于 Grafana Loki 构建了日志系统&#xff0c;在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案&#xff0c;并基于 Apache …

基于Crontab调度,实现Linux下的定时任务执行。

文章目录 引言I 预备知识Crontab的基本组成Crontab的配置文件格式Crontab的配置文件Crontab不可引用环境变量杀死进程命令II Crontab实践案例Crontab工具的使用重启tomcat服务每分钟都打印当前时间到一个文件中30s执行一次III 常见问题并发冗余执行任务&& 和|| 和 ;的区…

ChatGPT 的幻觉有改善吗?

​​​ 在早在 ChatGPT 刚刚问世时&#xff08;几个月前&#xff09;&#xff0c;我就曾写过一篇文章&#xff0c;描述它愿意&#xff08;不&#xff0c;是渴望&#xff09;向用户提供大量虚假信息。这些错误被称为幻觉&#xff0c;这是一个技术术语&#xff0c;强调了 ChatGPT…

安装docker+docker远程连接

docker Docker 是⼀个开源的应⽤容器引擎&#xff0c;可以实现虚拟化&#xff0c;完全采⽤“沙盒”机制&#xff0c;容器之间不会存在任何接⼝。 docker架构 docker核心概念 1. 镜像&#xff08;images&#xff09;&#xff1a;⼀个⾯向 docker 容器引擎的只读模板&#xff0c;…

89.SAP ABAP数据类型 - 笔记

1.SAP ABAP数据类型 目录 全局类型 标准类型 局部类型 全局类型 数据字典中创建的类型&#xff08;下图中②&#xff09; Data Element 是一个数据的类型&#xff0c;包含了这个元素的寓意属性&#xff0c;它包含了一些非结构化的数据对象的技术属性&#xff08;域&#…

丈夫每次回家打妻子,还在外染上性病,婚后没完整过一个年

丈夫每次回家打妻子&#xff0c;还在外染上性病&#xff0c;婚后没完整过一个年 这是一篇涉离婚纠纷的民事起诉状 &#xff08;范文点评&#xff09; 离 婚 起 诉 状 原告&#xff1a;徐某秀&#xff0c;女&#xff0c;现年48岁&#xff0c;汉族&#xff0c;无业&#xff0c…

记录一次SQL 查询 LEFT JOIN 相关优化

记录一次 LEFT JOIN 相关优化 1 环境说明2 sql 在dm库查询用时30秒2.1 sql 语句2.2 sql 执行计划 3 调优数据库参数3.1 使用hint 调整数据库参数3.2 hint 的执行计划 4 永久修改数据库参数5 参数说明6 达梦数据库学习使用列表 1 环境说明 某项目的公文办公系统在生产环境刚部署…

嵌入式学习----网络通信之TCP协议通信

TCP&#xff08;即传输控制协议&#xff09;&#xff1a;是一种面向连接的传输层协议&#xff0c;它能提供高可靠性通信(即数 据无误、数据无丢失、数据无失序、数据无重复到达的通信) 适用情况&#xff1a; 1. 适合于对传输质量要求较高&#xff0c;以及传输大量数据 的通信。…

系统编程-信号

6 信号与管道 1 目录 6 信号与管道 1 信号 信号的概念 信号的使用 信号的发送 通过函数来实现信号的发送 信号改造函数(重点) 给自己发送信号函数 定时闹钟函数 暂停进程的函数 例题&#xff1a; 代码一&#xff1a; 代码二&#xff1a; 代码分析 -- linux系统下…

ArcGIS热点分析 (Getis-Ord Gi*)——基于地级市尺度的七普人口普查数据的热点与冷点分析

先了解什么是热点分析 ? 热点分析 (Getis-Ord Gi*) 是一种用于空间数据分析的技术&#xff0c;主要用于识别地理空间数据中值的聚集模式&#xff0c;可以帮助我们理解哪些区域存在高值或低值的聚集&#xff0c;这些聚集通常被称为“热点”或“冷点”&#xff0c;Gi* 统计量为…

Docker介绍、docker安装以及实现docker的远程管理

1.Docker介绍 1.Docker介绍 Docker 是⼀个开源的应用容器引擎&#xff0c;可以实现虚拟化&#xff0c;完全采用“沙盒”机制&#xff0c;容器之间不会存在任何接口。 Docker 通过 Linux Container&#xff08;容器&#xff09;技术将任意类型的应用进行包装&#xff0c;变成一…

PhotoZoom Pro 9:AI加持让图像放大革命性飞跃 PhotoZoom下载

全球领先的数字图片和图形缩放软件——PhotoZoom Pro 9&#xff0c;现已正式发布&#xff01;凭借全新的S-Spline Max AI图像缩放技术&#xff0c;PhotoZoom Pro 9在图像放大质量上达到了前所未有的高度。欢迎各位下载和体验最新的9系列版本。 PhotoZoom Pro 9发布 PhotoZoom9…