当前位置:网站首页>代码 Revert 后再次 Merge 会丢失的问题,已解决
代码 Revert 后再次 Merge 会丢失的问题,已解决
2022-08-11 02:31:00 【Java Punk】
一、问题场景
前提,我所在的公司采用 GitLab 进行代码管理。
这次的异常发生在不久前对系统的一次常规迭代升级过程中,由于系统依赖的第三方包出现了问题,导致服务起不来,为了不影响其他功能的使用,所以将 master 分支进行 revert 到上次的版本。
等到我们解决了依赖包的问题,重新从 dev 提了 merge 到 master 的申请时,却发现代码变动都不显示了(注:如果修改了代码,也可能出现“conflict”的问题,但是本质一样),导致无法合并分支。也就是说:被回滚的代码被认为已经存在于 master 分支上,不算改动。
二、原因分析
revert 操作实际是只是进行了一次逆向 commit,将 merge 的代码进行回滚,但是 commit 的记录还存在。也就是说,dev 上面存在的待提交的代码,其实已经是 master 的过去代码,属于已提交过的状态,所以不会显示 different。
三、解决方案
方案一:官方推荐方法
该核心思想就是:对 revert 的那次提交记录再次 revert 。
- 首先,切换到 master 分支,并基于 master 分支拉出一个分支 revert_tmp。作为 master 的副本,revert_tmp 的作用就是保存 revert 的提交记录;
git checkout master
git checkout -b revert_tmp
- 其次,在 master 分支上找到 revert 的那条提交记录的版本号,回滚至之前的版本(版本号可以通过“git log”命令,或者从网页端查看);
git log # 查询<版本号>,格式,如:f2c3b544166eec612ea6814d6cd19aeef46824f8
git revert <版本号>
- 然后,切换到 dev 分支上,将 revert_tmp 这个分支 merge 到 dev 分支上。
git checkout dev
git merge revert_tmp
git push -f
- 最后,在 dev 重新提交对 master 的 merge 申请,会发现 revert 之前的代码都回来了。
方案二:reset 法
与 revert 不同,采用 -- git reset 将 head 向后移动到上一次 merge 前的 commit 版本,会丢弃所有的 merge commit 记录(revert 不会丢弃,是逆向 commit),所以,再次合并不会出现记录不显示或者冲突的问题。
git reset HEAD^ # 回退所有内容到上一个版本
git reset HEAD^^ # 回退所有内容到上上个版本
注意:谨慎使用 –hard 参数,它会删除回退点之前的所有信息。
HEAD 说明:
–hard 参数 | 参数说明 |
---|---|
HEAD | 表示当前版本 |
HEAD^ | 上一个版本 |
HEAD^^ | 上上一个版本 |
HEAD^^^ | 上上上一个版本 |
以此类推... | |
^ 可以使用 ~数字表示 | |
HEAD~0 | 表示当前版本 |
HEAD~1 | 上一个版本 |
HEAD~2 | 上上一个版本 |
HEAD~3 | 上上上一个版本 |
以此类推.. |
总结
- 建议使用官方的方法 - revert,不会删除版本记录;
- 文章参考:Git恢复之前版本的两种方法reset、revert
边栏推荐
- Gaussian beam focused by thermal lens
- MySQL Basics [Part 1] | Database Overview and Data Preparation, Common Commands, Viewing Table Structure Steps
- 0 in the figure, etc. LeetCode565. Array nesting
- GBJ3510-ASEMI家电电源用整流桥GBJ3510
- 报错处理:org.xml.sax.SAXParseException: 不允许有匹配 “[xX][mM][lL]“ 的处理指令目标
- 88Q2110 access C45 phy address through C22
- google搜索技巧——程序员推荐
- 【PHP】入门知识
- gRPC基础概念:闭包
- The practice of alibaba data synchronization component canal
猜你喜欢
Please talk about for...in and for...of in JS (below)
[oops-framework] Template project [oops-game-kit] Introduction
ARM开发(四)新手小白如何阅读芯片手册,裸机驱动开发步骤以及纯汇编实现点灯,汇编结合c点灯,c实现点灯
This Thursday evening at 19:00, Lesson 5 of the sixth phase of knowledge empowerment丨OpenHarmony WiFi subsystem
年薪30W,BAT抢着要,懂面试技巧的测试人究竟多吃香?
Multi-threaded ThreadPoolExecutor
【idea 报错】 无效的目标发行版:17 的解决参考
ES进阶 数组功能语法新特性详解
漏洞管理计划的未来趋势
OptiFDTD应用:用于光纤入波导耦合的硅纳米锥仿真
随机推荐
alibaba数据同步组件canal的实践整理
How to realize the repeatable design of FPGA
Pytorch/TensorFlow/Numpy常用函数汇总
软件测试面试题:什么是Negative测试?
【C 数据存储详解】(1)——深度剖析整形数据在内存中的存储
gRPC闭包调度器
2022制冷与空调设备运行操作考试试题模拟考试平台操作
如何开展性能测试,你知道吗?
Inter-process communication method (2) Named pipe
2022年G1工业锅炉司炉题库及模拟考试
Please talk about for...in and for...of in JS (below)
网络安全笔记第四天day4(kali基本操作)
ARM development (4) How to read the chip manual for novice Xiaobai, bare metal driver development steps and pure assembly to achieve lighting, assembly combined with c lighting, c to achieve lighting
The ifconfig compared with IP command
入职数字ic设计后的一些工作心得
对加密世界的经济误解:现金是储蓄?稀缺性创造价值?
leetcode 739. Daily Temperatures 每日温度(中等)
3342: String manipulation problem solving
Section 4-6 of the first week of the second lesson: Appreciation of medical prognosis cases + homework analysis
数论基础-整除(编程例题)