git revert以及revert的恢复

10 篇文章 0 订阅
订阅专栏
7 篇文章 0 订阅
订阅专栏
4 篇文章 1 订阅
订阅专栏

一:背景与方案

在工作中遇见的这样的场景:

场景一:

已经merge到待发布的版本分支中的功能需要移除当前的分支,改在后续版本发布,示意图如下,展示的是commit序列,
在这里插入图片描述
这里想要移除的功能是commit_2的,所以需要在不改动其他commit相对顺序前提下,将这个‘瘤’取下,因此这里就绝对不推荐git reset的方式,因为如果commit_2在末尾可以,如果不在末尾,将导致commit_2后的提交都被清空,这里要使用git revert的方式,像链表从中间删除元素一样,保持其他提交的顺序。

git checkout -b revert_commit origin/master   #从远程分支上创建本地的revert分支
git revert commit_2    #注意这里commit_2是指定的提交id,注意这步可能会冲突,因为有可能其他人在你这个提交基础上做了工作,要解决冲突
git add .  #这一步用来解决冲突后添加文件到暂存区,没有冲突不需要
git commit -m 'revert commmit_2'     #设置revert的提交信息
git push origin revert_commit:revert_commit     #上传本地的revert分支
git merge revert_commmit master     #分支合并

场景二:

上一个版本已经定了,如下的commit顺序,这里commit_2是虚线表示记录还在,但是代码不在,可以理解为commit_2是一个加法,revert1是针对commit_2的一个减法。

在这里插入图片描述
问题来了,当前master分支上是如上图所示的提交日志,现在新版本又需要这个commit_2的代码了,这里注意有一个坑的方法,我们也先说坑。
很多人觉得无所谓,我本地更新最新的master分支代码,恰好我之前写的commit_2本地还有分支,我直接rebase一下不就可以了吗?而且应该会生成一个新的commit_5紧接在revert1后面。
问题来了,rebase就是这个坑,使用rebase变基,相当于把你本地的这个分支(注意和远程上的现在侧commit_2合并的分支一个名字)再次merge一遍,但是你要注意,最新的commit是revert1,是摘除这个分支的merge请求,会导致你无论rebase多少次,这个commit_2的代码都不会出现,被revert1抵消掉了,而且会使得你本地的这个分支也被rebase掉,还需要git reflog&git reset --hard HEAD@{i}恢复。
解决方法:

方法1:负负得正(推荐)

既然revert剔除了我的commit_2提交,那我再revert这次revert,负负得正不就行了?确实有效。
这里注意要找对那个revert的commit_id

git revert revert1   #注意,还是有可能冲突的,有冲突要解决然后add就不重复了

执行成功后最终本地的commit日志如下,这里commit2的代码也恢复了,随后在push,merge到remote即可
在这里插入图片描述

方法2:新建分支重新提交(不推荐)

这个方法我其实不想写,但是也是写到rebase坑的时候想到的,新建一个不同名的分支,在commit_2代码量不大的情况下,重新拷贝到新分支上,然后重新提交,merge,这样绕过了revert1的限制,本质上这个方法就是重写。

二:工作中的实际操作(针对场景2)

以下数据已经经过脱敏处理。

git log    #找到revert处
commit f71b258de85679d5cdad395f6d8ac675f9817a1a
Author: leel 
Date:   Wed Nov 9 17:39:13 2022 +0800

    add version 1.0.0

commit 395b7f8fd8b29eefd25e41358f23a71f7ab93184   <------------------这里是上次revert的id
Author: liming 
Date:   Wed Nov 9 17:27:34 2022 +0800

    Revert "update rules"

    This reverts commit 215d734c866ed8adb88e8c33ed6fe624d349a9a8.

commit 23734eb14c7feb19716b6a9aa9fb7aa4c9d4b5f4
Merge: b866e32 246894a
Author: xiaohong 
Date:   Tue Nov 8 11:14:24 2022 +0800

    extended api verification common

commit 246894a619ad61c58dce1a8140196eaabc7e82ca
Author: xiaohong 
Date:   Tue Nov 1 17:43:37 2022 +0800

    extended api verification common
$ git revert 395b7f8fd8b29eefd25e41358f23a71f7ab93184
[cancel_revert_update_rules 4a2b079] Revert "Revert "update rules""
 5 files changed, 78 insertions(+), 57 deletions(-)

发现没冲突,而且git log已更新

$ git log
commit 4a2b0796190aa950ab8b9b75367ff80fbb3cd43d
Author: leel
Date:   Thu Dec 22 12:22:30 2022 +0800

    Revert "Revert "update rules""    <--------------------------更新了revert revert 即负负得正

    This reverts commit 395b7f8fd8b29eefd25e41358f23a71f7ab93184.

commit b6abc418f808cfcddee25e163299195b9ebde440
Merge: b2dee9d bf1b916
Author: xiaohong
Date:   Wed Dec 21 10:26:54 2022 +0800

    remove side

然后就是常规的git commit -m&git push 略

git revert 之后 找回原来的代码
t949500898的博客
04-11 8931
git revert 如果需要回退线上的代码,一般会通过git revert ${commit hash} 新添加一个提交,返回之前的版本。 相比 reset ,revert 会在提交历史中增加一个新的提交,而不会对之前的提交进行任何更改。 默认情况下 revert 会自动执行如下步骤: 将反转指定提交的更改合并到工作区 将更改添加到暂存区 创建新的提交 git revert b1hvh3u 撤销 git revert 如果后续,需要把这份代码找回并合并到master,只需要把之前revert的那条c
Git恢复之前版本的两种方法reset、revert(图文详解)
zmjames2000 Just record
09-26 1036
方法一:git reset 原理: git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,如下图所示,假设我们要回退到版本一: 适用场景: 如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。 具体操作: 查看版本号: 可以使用命令“git log”查看: 使用“git reset --hard 目标版本号”命令将版本回...
git revert后,再还原成修改前的版本
王木木夕的博客
05-19 2018
删除revert的这几次commit 使用git reset相关命令即可 git reset :回滚到某次提交。 git reset --soft:此次提交之后的修改会被退回到暂存区。 git reset --hard:此次提交之后的修改不做任何保留,git status 查看工作区是没有记录的。 用法 git log // 查询要回滚的 commit_id git reset --hard commit_id // HEAD 就会指向此次的提交记录 git push origin HEAD --forc
git revert以及revert后的恢复
LRQQHM的博客
01-15 1174
git revert是创建一个新的commitrevert恢复的话再revert一次就好了。
谈一谈git revert和revert the revert
FinixLei的专栏 (https://github.com/FinixLei)
07-07 563
谈谈git revert
Git恢复之前版本之reset与revert
03-04 234
...
git revertgit reset的区别详解
09-15
### Git RevertGit Reset详解 #### 一、引言 在版本控制工具Git中,`git revert`和`git reset`是两个非常重要的命令,它们可以帮助开发人员撤销之前的操作,但二者的实现机制和使用场景有所不同。本文将详细介绍...
git基础教程(22)回退提交push到远端的提交--git revert 详解
二进制君
10-16 2535
工作中难免会遇到一些commit需要回退,可以用reset和revert。 reset是回朔到指定的commit版本,指定的commit版本之后的操作commit都重置了。revert是删除指定的commit操作的内容,指定的commit之前和之后commit操作都不受影响,与此同时这个操作也会作为一个commit进行提交。但对于已经提交到远端的公共分支比如master上的commit只能用revert来进行回退操作,具体用法如下所示: 这是当前工作区域log的情况 bash-3.2$ git log
git revert
智识帮的博客
01-17 957
git revert用于撤销文件,撤销文件后不会影响其他的提交。 1.git revert <commit-id>:撤销某个提交 $ git revert 1fb01c792071ad0a4c9a06f67d42d3bfd9e21225//执行命令后,会进入文件编辑界面,编辑内容如下Revert "mm" //提交日志的内容 This reverts c...
git系列】git-revert含义用法选项示例详解
最新发布
wang2leee的博客
04-26 1242
git系列】git-revert含义用法选项示例详解
Git恢复之前版本的两种方法reset、revert(图文详解)_git回退到某个版本(1)
2401_84297035的博客
04-17 3438
如果没有新建分支,那么只有一条时间线,即只有一个分支,在Git里,这个分支叫主分支,即master分支。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。而且要git add 文件名。
记录github 不小心revert导致代码消失的问题
程序猿进化梯
03-19 947
Git版本控制系统中, git revert 是一个非常实用的命令,用于撤销过去的某个或多个提交,并且不改动历史记录,而是通过创建一个新的逆向提交来实现变更的回滚。这对于修复已合并到主分支的错误、撤销上线后发现的问题以及保持提交历史完整性等方面尤为重要。根据这几个选项,我需要将代码强制回到原来的版本,所以选择“hard”注意:文件将被回到所选择的这个提交版本,但是当前改变会丢失。不小心点了revert commit怎么办呢?
git还原到某个版本
xixingzhe2的博客
05-21 1万+
开发十年,就只剩下这套Java开发体系了 >>> v2还原到v1 1、强制还原 如果使用这种方式还原到v1,将丢失还原到v1到v2之间的所有提交及日志。 1.1显示日志 1.2 重置版本(本地分支还原) 使用硬重置,否则重置后,还会有未提交的文件 1.3 提交(推送到远程分支) 需要强制推送 2、温和还原 为...
Git恢复之前版本的两种方法reset、revert(图文详解)【学习】
热门推荐
stephenbruce的博客
11-30 1万+
Git恢复之前版本的两种方法reset、revert(图文详解)
gitgit revert后需要注意点
不忘初心,坚定道路!
12-16 629
前言 git revert这个操作用的比较少,如果分支支持强推那必然强推,不支持强推的情况,你就需要用这个命令,然后团队的人需要补一下使用该命令的坑。 注意点 比如你不小心将测试分支代码合并到master分支上。 当master中不小心合并测试分支代码后revert测试分支代码,需要注意在自己分支上如果之前有合并到测试分支的提交再合并到master上是无效的。 首先,需要确保你当前还没有去合master上revert提交的代码。如果合并了,使用git reset --hard 本地先跑到提交
git revert后怎么恢复
06-10
使用 git revert 命令撤销一个或多个提交会创建一个新的提交,该提交包含了撤销的更改。如果您希望恢复被撤销的更改,可以使用以下两种方法之一: 1. 使用 git reflog 命令查看您的提交历史,并找到被撤销的提交的哈希值。然后使用 git cherry-pick 命令将该提交重新应用到分支上。 例如: ``` git reflog ``` 查看提交历史,找到被撤销的提交的哈希值,如:abc123 ``` git cherry-pick abc123 ``` 将该提交重新应用到分支上。 2. 如果您使用 git revert 命令撤销的是最新的提交,可以使用 git reset 命令撤销撤销操作,将分支恢复到撤销之前的状态。 例如: ``` git reset HEAD~1 ``` 将分支恢复到撤销之前的状态。注意,这会删除您使用 git revert 命令创建的新提交。如果您希望保留这些提交,应该使用第一种方法。
写文章

热门文章

  • Mysql多表联查,查询结果出现重复的原因和解决方法 25907
  • 笔记本连接RK61键机械键盘非损坏的win和alt对调,数字键失灵以及特殊字母键失灵恢复 19793
  • git项目如何打patch以及打patch的注意事项 19294
  • Windows环境同时安装多个版本的Python解释器(python2和python3)(超详细) 17167
  • linux中的rz和sz 8726

分类专栏

  • 开发工具 5篇
  • 运维 10篇
  • 其他 4篇
  • git 工具 7篇
  • Python 3篇
  • mysql 5篇
  • 数据库 4篇
  • 测试 1篇
  • 计算机基础知识 6篇
  • 系统后台 6篇
  • 可视化数据分析
  • docker 1篇
  • django项目
  • 社交网络 1篇
  • 爬虫 2篇

最新评论

  • git revert以及revert的恢复

    margicnumber1: 有用啊 方法1 谢谢~

  • Windows环境同时安装多个版本的Python解释器(python2和python3)(超详细)

    melt_1026: 引用「https://www.python.org/ftp/python/3.10.5/python-3.」 https://www.python.org/ftp/python/3.10.5/python-3.10.5-amd64.ex 链接后,文件后缀名少了e; 添加 e 后可下载。 https://www.python.org/ftp/python/3.10.5/python-3.10.5-amd64.exe

  • typora问题解决:This beta version of Typora is expired

    sunghosts: PS:最后一步的替换,还需要把安装目录下的同名文件替换,所以,我这里共替换了两处

  • 解决虚拟机磁盘满了,无法上传文件,给虚拟机扩容问题

    m0_45695898: 15G的导入进去,在虚拟机里面占用了30G,为啥会更大呢?

  • typora问题解决:This beta version of Typora is expired

    shakerChann: 我也遇到前边说的解密的问题了,是不是跟版本还有关系啊?另外想问下这个破解脚本的加密方式是怎么得到的?

大家在看

  • SSM丹霞博物馆网站l1k0t 前台可在线观看视频 后台可上传MP4
  • 前序中序画树、后序中序画树、前序后序画树 402
  • 【9月持续更新】国内ChatGPT-4中文镜像网站整理 976
  • javascript的闭包学习 233
  • MyTinySTL项目学习01——Vector实现

最新文章

  • 软链接删除坑:记一次降级openssl,删除软链接导致的ssh失效,服务器失联
  • linux系统中设置服务开机自启动
  • python中父类和子类的属性,方法互相调用
2024年1篇
2023年3篇
2022年13篇
2021年12篇
2020年13篇
2019年2篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家河南通道商场美陈制造郴州玻璃钢牛雕塑黄山玻璃钢雕塑工厂丽水玻璃钢马雕塑双鸭山玻璃钢雕塑泗县玻璃钢花盆花器秦皇岛玻璃钢雕塑厂家湖南玻璃钢果蔬雕塑天津大型现代人物玻璃钢雕塑玻璃钢雕塑订购玻璃钢迎宾雕塑厂家大型玻璃钢花盆研究酒桶玻璃钢卡通雕塑定制玻璃钢传统人物雕塑哪家价格便宜玻璃钢小品动物雕塑玻璃钢雕塑不翻模合肥供应玻璃钢卡通雕塑玻璃钢人物雕塑网站党建文化玻璃钢雕塑供应商家青岛即墨玻璃钢雕塑夏天商场美陈文艺鹤壁室内玻璃钢雕塑湖北环保玻璃钢雕塑哪家便宜葫芦岛玻璃钢雕塑生产厂家甘肃户外玻璃钢雕塑设计漯河玻璃钢雕塑公司商场ip美陈布置玻璃钢雕塑的价格.上海室内商场美陈现价江苏秋季商场美陈价格香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化