(附Git的cherry pick神操作)GitLab远程分支多次合并后发现其中一次有问题该如何解决和回滚?

news2024/11/25 2:34:02

目录

问题现象:

问题分析:

1、不需回滚

2、需要回滚

解决方法:

步骤1:

步骤2:

步骤3:

步骤4:

步骤5:

拓展:git代码回滚的可视化操作和命令操作

可视化操作步骤:

命令操作:


问题现象:

        最近在项目中遇到一个git分支代码回滚的问题,如下:

        在GitLab上的远程分支已经合并过多次了,但是突然发现之前的某一次合并的代码存在问题此时该如何解决和回滚?


问题分析:

        出现这种现象,很显然是本地分支提交和推送代码(commit&push)后没有检查清楚并确保代码的正确性,就已经合并(merge)远程分支上了。

        有时候难免会有些误操作,这是可以理解的,毕竟大部分时候程序员都是很忙的。

        当然,出现这种问题时,首先我们最好是先定位到有问题的合并记录,并找到对应的操作人,然后再根据实际情况处理。

        基本上就两种方式,根据实际情况大家酌情使用【这里假设操作人就是我自己】:

1、不需回滚

        适用于问题代码量不多问题代码自己很熟悉(问题代码就是自己写的)的情况。

        此时我可以直接在本地分支上对问题代码进行手动修正,然后再重新提交、推送、合并到远程分支去,这样就能覆盖掉原本的问题代码了;

        这也是程序员几乎都知道的方式。

2、需要回滚

        适用于问题代码量很多问题代码涉及到他人的情况。
       因为问题代码太多了,如果一一修改会浪费很多时间,而且不一定能改对,所以建议回滚后重新合并。

        注意,这里提到的“涉及到他人”,是指问题出现的直接原因,是因为我的某些git操作导致我的旧代码覆盖了他人写的新代码(如commit&push了一些很久以前本地缓存的代码,而他人早已对这部分代码的功能做了很多修改了,结果自己没意识到本次git操作中居然参杂了旧代码,结果覆盖了他人的代码导致出现了问题)。

        其实这种误操作的情况极少出现,所以大家也不需要太慌。一般都是因为本地缓存代码过于久远导致的。

        感兴趣的朋友可以查看我的另一篇文章,里面就有一个经典案例(本文其实就是为了那篇文章出现的问题而写的)。

        经典案例-文章链接:

(附Git的cherry pick神操作)如何解决gitlab合并分支请求时的代码改动(commits和changes)与本地分支的(commit&push)不一致的问题-CSDN博客


解决方法:

        不需回滚的方式,其实就和正常的代码改动、提交&推送、合并分支是一样操作步骤,这里就不提了,下面着重提一下需要回滚的方式的可视化操作步骤:

       警告:

        代码回滚是一个非常慎重的操作,切勿轻易执行。

        注意:

        如果是多人开发,那么回滚的时候有可能会有其他人还在提交代码,所以建议在进行以下回滚操作步骤的过程中,先通知其他人不要做代码提交操作。

步骤1:

        先定位到有问题的合并记录(以下简称“问题记录”),找到该记录的操作人。

步骤2:

       回滚代码(建议先对远程分支进行copy备份,防止回滚操作有误)。

        如果问题记录后面(由于倒序原因,从界面上看就是问题记录的上面),已经没有其他的代码提交记录了吗,则可以直接打开该记录,点击界面中的Revert回滚按钮,让代码回滚到该记录之前的状态:

        而如果问题记录后面,还有其他的代码提交记录(如本文开头提到的问题现象),此时也可以尝试点击该记录的Revert回滚按钮,但有可能会出现报错提示(例如unversioned files等,忘记截图了,以后有空再补吧)。

        此时需要根据时间倒序顺序(即从最近的一次提交记录到问题记录)开始,对每个需要回滚的记录,都需要进行回滚。

        依次点击这些记录的Revert回滚按钮,按顺序将代码回滚到问题记录之前的状态。

步骤3:

        创建新的本地分支2

        在IDEA开发工具上,先删除远程分支1对应的本地分支1,这样做是为了清除本地缓存和避免代码污染问题。

        然后重新拉取远程分支1到本地(此时就能保证本地分支1和回滚后的远程分支1的代码完全相同)。

        最后是基于刚拉取的本地分支1,创建新的本地分支2(一般都是不建议直接操作分支1,例如一般都不建议直接在dev分支上进行开发,而是在新的分支上提交&推送代码后,合并到dev分支)。

步骤4:

        在本地分支2重新推送(push)被回滚的代码,让代码维护到最新状态。

        所有被回滚的提交记录涉及代码都需要重新提交(除了被回滚的问题记录设计的代码),才能确保代码维护到最新状态;这里是建议让这些提交记录的操作人,各自去重新提交自己被回滚的代码(当然如果你经验丰富且自信满满,那你也可以自己一个人完成该步骤,不过不太建议)。

        而对于问题记录的代码,首先是要区分出哪些是真正需要提交的、哪些是需要被回滚且不需要再提交的(当然也可以不用手动去区分,因为我们可以使用git的cherry pick神操作快速搞定)。


        关于Git的cherry pick神操作,其实在上面提到的我的另一篇文章中就有提到,所以这里就不再赘述了,感兴趣的小伙伴可以自行前往查看,这里再贴一次文章链接:

(附Git的cherry pick神操作)如何解决gitlab合并分支请求时的代码改动(commits和changes)与本地分支的(commit&push)不一致的问题-CSDN博客文章浏览阅读510次,点赞8次,收藏12次。(附Git的cherry pick神操作)如何解决gitlab合并分支请求时的代码改动(commits和changes)与本地分支的(commit&push)不一致的问题https://blog.csdn.net/weixin_42585386/article/details/138657274


        切换到本地分支2上,在IDEA开发工具的Git-Log窗口找到真正需要提交的代码记录,将它们都cherry pick到当前分支上:

        然后就可以push代码了(需要cherry pick的代码已经被提交过,所以不需要再次commit了)        

步骤5:

        重新发起合并分支请求,将本地分支2代码合并到远程分支1

        记得检查本次合并请求的commit和change记录是否正确,确保不再有问题;合并完后可以对本地分支1进行update操作(即拉取远程分支1的代码),保持远程分支1本地分支1代码是最新且相同的。

        步骤不多,但需要步步为营,谨慎操作,尤其是步骤2和步骤3,。


拓展:git代码回滚的可视化操作和命令操作

可视化操作步骤:

        通过gitlab和IDEA的git按钮来进行操作,不需要书写git命令;适用于需要回滚的代码提交记录不多的情况。

命令操作:

        主要通过git命令来实现,git命令功能更强大有效,但依赖于一定的记忆或笔记能力(要记git命令或搜一下git命令的笔记了)。

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

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

相关文章

利用OpenShift的ImageStream部署临时版本

公司是港企,项目都部署在OpenShift上统一管理,因为运行环境为香港网络(外网),配置、中间件等大陆无法直接访问联通。因此在大陆开发时,测试是个很大的问题。为了避免往Git上频繁提交未确定可用的版本,选择用利用OpenSh…

ruoyi-vue-pro 使用记录

ruoyi-vue-pro 使用记录 项目地址文档 数据库bmp 项目地址 ruoyi-vue-pro github地址ruoyi-vue-pro gitee地址 文档 文档地址知乎帖子 吾爱帖子 数据库 请根据实体类,直接给与Mysql创建数据表 bpm_process_listener,字段和数据库为英文名&#xff…

Linux操作系统中管理磁盘的另外一种操作方式。即LVM——逻辑卷管理操作

在Linux操作系统中管理磁盘的一种方法名称——LVM,这种管理磁盘的优势。 1.使用LVM去管理磁盘可以在不影响原来数据的前提下去扩容磁盘空间或者是缩减磁盘空间。 在LVM中除了上层逻辑券可以扩容,下层的券组也可以扩容。 2.使用LVM管理的磁盘支持快照功…

如何将图片表格转成excel?分享3种好用的软件!

在信息爆炸的时代,我们每天都会接触到大量的图片表格。这些表格中可能包含着我们需要的各种数据和信息,但是如何将它们快速、准确地转化为Excel格式,以便我们进行编辑、分析呢?今天,就让我们一起来探讨一下如何将图片表…

日本OTC机械手维修需要注意哪些问题呢?

随着工业4.0时代的到来,机器人在制造业中的应用越来越广泛。OTC(Over The Counter)机器人作为工业机器人的一种,以其高效、精准、稳定的特点受到众多企业的青睐。然而,在实际使用过程中,可能会出现一些OTC机…

你的计算机配置似乎是正确的,但该设备或资源DNS没有响应

方法/步骤 方法一: 快捷键“winr”,输入services.msc,进入服务界面,找到dnsclient,确保是运行状态,如果没有运行,则选中该条目,右键选择运行。 电脑提示“您的计算机配置似乎是正确”&#xf…

生成式AI+跨境电商有哪些新玩法?店匠科技与亚马逊云科技已经在路上

导读 跨境电商一直是生成式AI最热门的应用领域之一。 生成式AI在跨境电商行业的核心应用场景有哪些?AI跨境电商又有哪些新玩法? 根据海关数据,2023年我国跨境电商进出口总额达2.38万亿元,增长15.6%。我国跨境电商主体已超10万家…

ABB机器人IRB360介绍

随着自动化技术的不断发展,分拣和包装行业的应用也越来越广泛。 工业机器人扮演的角色也随之不断增加,其中ABB机器人的一款产品IRB 360 FlexPicker 在抓取和包装技术方面占有重要的地位。与传统的刚性自动化技术相比较,IRB 360具有高灵活性、…

在家轻松挣钱:深入解析问卷调查项目

在这个快速发展的互联网时代,谁不想找到一种既方便又能赚钱的方式呢?今天,我们就要深入了解一种既不需要经验,又可以在家轻松上手,甚至日赚100至300元的项目——问卷调查项目。不论你是学生、家庭主妇,还是…

EPIC本周送《电气马戏团》,下周送神秘游戏

EPIC Games下周将为玩家们送上一款神秘游戏!这是一个令人兴奋的消息,让我们拭目以待看看他们会送上什么样的游戏吧。 而本周,EPIC Games送出的免费游戏是《Circus Electrique》。这款游戏融合了多种元素,包括故事驱动的角色扮演、…

视频号小店应该如何开店呢?详细的开店流程分享给你!

大家好,我是电商小V 视频号小店就是威信视频号团队为咱们商家提供的卖货平台,可以说是支持咱们商家在视频号场景中开店进行经营的模式, 视频号大概的开店流程那就是:找到视频号开店,选择企业入驻,填写信息&…

SliderCaptcha滑块验证码功能

SliderCaptcha滑块验证码功能 资源文件及文档&#xff1a;https://gitee.com/LongbowEnterprise/SliderCaptcha <!DOCTYPE html> <html lang"en" xmlns:th"http://www.thymeleaf.org"> <head><meta charset"UTF-8"><…

Mysql中表的创建以及数据类型

DDL 在表结构的操作 表的创建 creat table 表名&#xff08; 字段1 字段类型 [约束] &#xff0c; 字段2 字段类型 [约束] &#xff09;[comment 标注释]; create table tb_user(id int comment ID,一行字段的唯一标识,username varchar(20) comment 用户名,name varchar(…

如何使用Python为Excel文件添加预设文档属性和自定义文档属性

向Excel文件添加文档属性是专业地组织和管理电子表格数据的关键步骤。这些属性&#xff0c;如标题、作者、主题和关键词&#xff0c;增强了文件的元数据&#xff0c;使得在大型数据库或文件系统中跟踪、排序和搜索文档变得更加容易。通过包含这些信息&#xff0c;您不仅提高了文…

Java Swing游戏开发学习27

内容来自RyiSnow视频讲解 这一节讲的是Equip & Use Items装备与使用物品。 前言 实现捡起物品、切换武器装备、使用物品。 修复问题 当光标在物品栏&#xff08;背包&#xff09;中移动到没有物品的格子中的时候&#xff0c;使装备介绍子窗口不可见&#xff0c;反之可见…

R语言两种方法实现随机分层抽样

为了减少数据分布的不平衡&#xff0c;提供高样本的代表性&#xff0c;可将数据按特征分层一定的层次&#xff0c;在每个层次抽取一定量的样本&#xff0c;为分层抽样。分层抽样的特点是将科学分组法与抽样法结合在一起&#xff0c;分组减小了各抽样层变异性的影响&#xff0c;…

知识库文档系统源码部署/搭建/上线/运营/售后/更新

一款基于ThinkPHPFastAdmin开发的知识库文档系统&#xff0c;可用于企业工作流程的文档管理&#xff0c;结构化记录沉淀高价值信息&#xff0c;形成完整的知识体系&#xff0c;能够轻松提升知识的流转和传播效率&#xff0c;更好地成就组织和个人。为部门、团队或项目搭建知识库…

Hive Aggregation 聚合函数

Hive Aggregation 聚合函数 基础聚合 增强聚合

IP报文在设备间传递的封装过程

IP报文传递过程 1、PC1访问PC2报文传递过程1.1、PC1准备数据请求报文封装1.2、PC1准备ARP请求报文1.3、PC2准备ARP响应报文1.4、PC1完成数据请求报文封装 2、PC1访问PC3报文传递过程2.1、PC1准备数据请求报文封装2.2、PC1准备获取网关MAC地址的ARP请求报文2.3、网关准备ARP响应…

喜报|知从科技荣获“2023年度浦东新区创新创业奖”

4月11日&#xff0c;由上海市浦东新区人民政府举办的“2024年浦东新区经济突出贡献企业表彰活动”在上海国际会议中心隆重举行。知从科技凭借过去一年在行业内卓越的技术创新实力及对浦东新区发展作出的杰出贡献&#xff0c;入选创新创业20强企业&#xff0c;荣获“2023年度浦东…