当前位置:网站首页>代码 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
边栏推荐
- leetcode 739. Daily Temperatures 每日温度(中等)
- FPGA learning column (xinlinx) serial communication -
- 117. 本地开发好的 SAP UI5 应用部署到 ABAP 服务器时,中文字符变成乱码的原因分析和解决方案
- gRPC基础概念:闭包
- 想进阿里?先来搞懂一下分布式事务
- alibaba数据同步组件canal的实践整理
- PIFuHD配置记录
- 数据存储全方案----详解持久化技术
- Some work experience after joining the digital ic design
- Ninjutsu_v3_08_2020-安全渗透系统安装
猜你喜欢

88Q2110 access C45 phy address through C22

gRPC闭包调度器

多线程之ThreadPoolExecutor

Detailed explanation of common methods of filtering matrix (array) elements in Matlab
![报错处理:org.xml.sax.SAXParseException: 不允许有匹配 “[xX][mM][lL]“ 的处理指令目标](/img/35/650c92ac4c5fc2d5826f3216a09e65.png)
报错处理:org.xml.sax.SAXParseException: 不允许有匹配 “[xX][mM][lL]“ 的处理指令目标

Future Trends in Vulnerability Management Programs

【oops-framework】模板项目【oops-game-kit】使用简介

Vim and copy and paste from the outside (don't need to install the plugin)

This Thursday evening at 19:00, Lesson 5 of the sixth phase of knowledge empowerment丨OpenHarmony WiFi subsystem

Deep Learning - Second Time
随机推荐
《如何戒掉坏习惯》读书笔记
Js prototype and prototype chain and prototype inheritance
0 in the figure, etc. LeetCode565. Array nesting
花甲的思考
【idea 报错】 无效的目标发行版:17 的解决参考
通过微透镜阵列的传播
【PHP】入门知识
2022制冷与空调设备运行操作考试试题模拟考试平台操作
Mysql_Note6
Mysq_Note4
[机缘参悟-66]:怎样才能让别人愿意帮你:利益共享法则、“大道”、“人性”
从键入网址到网页显示的详细过程
如何开展性能测试,你知道吗?
Some work experience after joining the digital ic design
维特智能惯导配置
nvidia-smi详解
CC0 与商业 IP:哪种模式更适合 NFT?
Detailed explanation of new features of ES advanced array function syntax
How to realize the repeatable design of FPGA
sql 使用到where和groupby时建立索引结果为啥是这样,原理是什么?