git revert后无法merge发生的惨案

2023-11-09

git revert后无法merge发生的惨案

前景描述:

目前公司开发模式是这样的,有测试分支test,开发分支dev1,dev2,dev3,(dev1,dev2,dev3都是基于test分支拉出来的)各分支如果没有问题后都会合并到test,如果test测试无误后,会直接从开发分支dev1直接合到生产prod分支。这种情况下合并操作如下:平时合并代码时,只能dev1代码向上合到test,但是test的代码时不能合到dev1的(因为test上有dev2,dev3的代码,而这两个分支代码的功能上线时间晚,所以test分支不能向下合到dev1)

问题描述:

由于不熟悉合并流程,某同事先把test分支的代码合到dev1并提交代码,然后切到test分支,把dev1代码合到test。其中第二步是没问题的,关键在于不应该把test分支代码合到dev1并提交代码了。其中最要命的是,在这次合并提交后,dev1分支上还有很多其他同事多次提交的代码

期望解决:

既然出现问题,就需要解决这个dev1分支上不应该有test代码的问题,最终要达成的目的就是要去掉test合并到dev1的那个操作(从而去掉test上的代码),并且不能影响这次错误合并后的其他同事多次提交的代码。

解决历程:

1、首先,我是使用了git revert 命令,我想的是直接通过 git revert commit-version -m 1 来撤销掉我那次错误合并(commit-reversion 是合并完成提交代码的版本号,-m 1 是保留当前分支,回滚掉原来分支。是一个固定写法),执行这个命令后,我发现dev1分支代码确实没有test分支代码了。但是问题来了,我重新从其他分支(dev2,dev3)合并代码到dev1分支,却发现不能merge了(具体情况是dev2,dev3的代码merge不下来)。
2、针对步骤1出现的情况,我又查找资料,发现使用git revert 命令撤销 merge操作后,确实会产生不能重新merge的情况。
3、接着我想到了git reset操作,即我git reset commit-version 回退到 我merge的那个版本前(commit-version 可以理解为错误merge版本的上一个版本,也就是没有问题的版本),然后我记住后续同事提交的commit-version版本,用git cherry-pick commit-version… (… 代表cherry-pick 后可以传多个版本号,用空格隔开即可)把后续同事提交的代码重新提交,然后把代码push即可(也可以使用命令git push origin HEAD:comitName --force ,comitName是你要推送的远程分支名,我这里是dev1)。

注:

如果在cherry-pick 的过程中出现了冲突 ,可以使用git cherry-pick --continue 跳过此版本;如果想中途推出cherry-pcik ,可以使用git cherry-pick --abort命令,执行完cherry-pick 后可以使用git cherry-pick --quit 命令。

4、经过步骤3,我以为用git reset可以解决这个问题了,但是应该是我在这个dev1分支上已经用过git revert命令了,所以现在用git reset还原也不行了。
5、我又想到另外一种方案,就是以dev1分支的某次提交版本为标准点 拉一个新的分支
(具体操作如下:在dev1分支下,执行命令git checkout -b new-branchName xxxxx , xxxxx是某次提交版本的版本号,我这里是错误merge的前一次的版本号),然后切到新的分支,执行git cherry-pick commit-version… (这个操作的意思是把旧分支错误merge版本后的代码提交记录同步到新的分支上来),具体步骤可以参考3。事实证明这次的操作是可行的。

总结:

1、git reset 和git revert的区别:
git reset是回退到某个版本之前,在这个版本后提交的代码都没有了,git revert 是单纯的撤销某次的操作,不影响后续的提交记录(但是如果是要撤销merge操作,请慎用此命令,因为有可能出现无法再次merge的情况,如果是撤销常规的commit 提交,可以使用
2、我一开始就选错了命令,不应该用git revert ,应该一上来就用git reset命令回退到某个没有问题的版本,然后用git cherry-pick 把问题版本后的commit提交一个个找回来。

最后参考链接:

https://cloud.tencent.com/developer/article/1971238
https://blog.csdn.net/zhaohongfei_358/article/details/127729172

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

git revert后无法merge发生的惨案 的相关文章

  • GitHub Web UI 中的“base”和“head”存储库是什么?

    GitHub 的 UI 相当不直观且考虑不周 所以这里有一个问题 什么是 头 回购 什么是 基础 回购 不知道是从哪一个抄来的 基础 和 头部 这两个词的意思是相同的 链表的 头 类似于树的 基 GitHub 有叉树和文件树 Head 和
  • 从历史记录中删除不需要的文件,包括带有过滤分支的所有引用

    我最近克隆了一个 SVN 存储库 其中曾经有一些二进制文件 但不再需要了 不幸的是 我已经将它和包含的二进制文件推送到了 Github 我现在想使用 git filter branch 删除它们 但在标签和分支方面我遇到了一些问题 基本上
  • Jupyter (iPython) 笔记本中的 Latex 宏未由 github 渲染

    我的 Jupyter 笔记本 ipynb 中有一个 Markdown 单元 其中包含以下内容 newcommand paren 1 left 1 right paren beta 2 该文件位于 Github 存储库中 LaTex 宏应用程
  • 为什么每次合并分支后我的 git log graph 都会多增长一行?

    我习惯使用git log oneline graph decorate all作为别名git ll在终端中查看提交图表 但是当我每次合并我的时 一个问题让我感到困惑develop to master 上面命令的输出可能是这样的 0d1bf7
  • 通过 SFTP 克隆 Git 存储库

    每次我尝试克隆 Git 存储库时都会遇到致命错误 我运行这个 git clone sftp email protected cdn cgi l email protection git foobar git 我得到这个 fatal Unab
  • 使用 ssh 身份验证的 IntelliJ 设置存储库

    我正在尝试使用设置存储库Intellij 2017 1 中的功能 但我想使用 ssh url 作为存储库而不是 https 我不喜欢处理那些在第一次创建后无法复制的个人访问令牌 所以我尝试使用 ssh 但当我单击 覆盖本地 时 出现以下错误
  • 运行“git gui”时如何跳过“松散对象”弹出窗口

    当我运行 git gui 时 我会看到一个弹出窗口 上面写着 This repository currently has approximately 1500 loose objects 然后它建议压缩数据库 我之前已经这样做过 它将松散对
  • 如何归档旧的 git 标签?

    我的 git 存储库中有一些不再重要的旧标签 我想存档标签 以便在运行 git tag 时默认情况下它们不会显示 我不想删除它们 因为我想保留历史记录 我怎样才能做到这一点 可以将标签保留在存储库中并避免将它们列为标签 它还可以避免默认克隆
  • git 无法暂存文件,将所有文件显示为重复,但字符大小写不是问题

    就我而言 我对我的文件之一进行了简单的一项更改 并想提交我的更改 但注意到 commit am 没有添加 提交该文件 发出 git 后ls files stage 我看到项目中的所有文件可能都显示为重复项 这是其中一个文件的示例 10064
  • 在 PowerShell 错误消息中使用 touch 命令创建新文件

    我的桌面上有一个使用 PowerShell 创建的目录 现在我尝试在其中创建一个文本文件 我确实将目录更改为新目录 然后输入touch textfile txt 这是我收到的错误消息 touch The term touch is not
  • 使用 versioneer 和 GitHub 更新版本号

    我在用versioneer适用于多个 GitHub 托管的 Python 项目 看来 versioneer 已安装并且工作正常 我可以调用project version 但是我忘记了如何更新版本号的过程 如果有什么东西在setup cfg
  • 错误:GitHub 目前无法显示这么大的文件 - 但该文件只有 1.06 MB [已关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我通过两种不同的方式将 HTML 文件上传到 GitHub 存储库 拖放以及使用终端上的 Git 添加 提交 推送 在这两种情况下
  • Visual Studio 2013删除已删除的git分支

    我遇到这个问题 在 VS2013 中 当我从源创建一个新分支时 源分支的下拉列表列出了曾经创建的所有分支 这包括长期从本地存储库和远程 源存储库中删除的分支 如何删除已删除的分支 Visual Studio 将它们保存在本地缓存中 您可以从
  • 忽略提交之间 git-diff 的*所有*空白更改

    我正在检查代码库并修复空白奇怪之处并通常纠正缩进等事情 并且我想确保我没有无意中进行任何其他更改 所以我正在做git diff w显示所有已更改文件中的差异 同时忽略空白差异 问题是这实际上并没有忽略all空白差异 至少是什么I认为仅仅是空
  • Git 版本控制中忽略父目录

    如何忽略父目录 gitignore 我尝试了这种模式 但似乎它们不起作用 如果您想忽略某个文件夹但不想修改现有的 gitignore 请将 gitignore 放入仅包含星号的文件夹中 下面是一个快速的 BASH 示例 用于完成 idea
  • 将更改恢复到特定提交

    我为自己创建了一个新分支 现在我需要一次将多个提交从主分支恢复到特定提交 我知道有一个安全的命令可以使用git revert no commit COMMIT TO REVERT FROM COMMIT TO REVERT TO 这给了我e
  • 有没有一种方法可以非交互地压缩大量提交?

    我正在尝试压缩一系列提交 HEAD 到 HEAD 3 有没有一种快速的方法可以做到这一点 或者我需要使用 rebase interactive 确保你的工作树是干净的 然后 git reset soft HEAD 3 git commit
  • 如何在 VS Code 中仅提交跟踪文件?

    git status 显示以下三个信息 要提交的变更 分阶段变更 未暂存提交的更改 未暂存更改 未跟踪的文件 我曾经git commit a 它提交 1 和 2 然而VS代码Commit All提交 1 2 和 3 Commit Stage
  • 如何为新的 eclipse (neon) java 项目初始化 git

    我安装了 eclipse Neon 的新副本 并在一个新的闪亮工作区中创建了一个新的 gradle java 项目 将 git 添加到聚会中的最佳实践是什么 我读到在项目目录中初始化 git 是真是个坏主意 https stackoverf
  • 合并git中2个不同分支中具有相同名称的2个文件

    我目前有一个名为test1在一个名为branch1创建自master另一个文件也命名为test1在一个名为branch2也创建自master 如果我合并 master 中的两个分支 这两个文件中编写的代码会发生什么 As 阿米尔回答了 ht

随机推荐

  • 【语义分割】分层多尺度注意力 Hierarchical multi-scale attention for semantic segmentation

    文章目录 1 摘要 2 引言 3 本文相关方法 3 1 Multi scale context methods 3 2 Relational context methods 3 3 Multi scale inference 3 4 Aut
  • 显式内存管理

    程序员在处理现实生活中国的C C 程序的时候 常会遇到诸如程序运行时突然退出 或占用的内存越来越多 最后不得不定期重启的一些典型状况 这些问题的源头可以追溯到C C 中的显式堆内存管理上 通常情况下 这些症状都是由于程序没有正确处理堆内存的
  • tomcat 乱码问题

    测试环境 apache tomcat 6 0 48 操作系统 win7 中文 默认GBK编码 一 浏览器采用的字符集 测试jsp
  • docker容器监控系统

    文章目录 第1章监控软件介绍 1 1监控工具 第2章Cadvisor Influxdb Grafana 2 1Cadvisor InfluxDB Grafana介绍 2 1 1Cadvisor 数据采集 2 1 2InfluxDB 数据存储
  • F - Ginger的GIAO

    F Ginger的GIAO SDUT OnlineJudge include
  • GDB调试动态库

    转载 https blog csdn net huluedeai article details 52225923 一 方法 gdb如何调试动态链接库的问题 比如我想调试的代码为动态链接库代码 我设置断点后却得到以下错误 gdb b mps
  • 你从未见过的python重点知识总结,最全面没有之一。过了这村就没这店了。

    强烈建议收藏再慢慢看 Py2 VS Py3 Py2 和 Py3 的差别 print 成为了函数 python2 是关键字 不再有 unicode 对象 默认 str 就是 unicode python3 除号返回浮点数 没有了long类型
  • 波士顿房价预测(终版讲解)

    代码段分四个部分 库的引入 加载数据 函数 配置网络结构 类 运行部分 获取数据 创建网络 启动训练 作图 我的是基础版 库只用到了numpy和matplotlib的pyplto两个 加载数据需要进行将数据作为数组输入 重整成14 N的二维
  • Mybatis PageHelper(MyBatis 分页插件 )的使用

    概述 如果你也在用 MyBatis 建议尝试该分页插件 这一定是最方便使用的分页插件 分页插件支持任何复杂的单表 多表分页 我们在项目中使用sql的手动分页太常见了 如果前台需要分页信息的话 一般我们是需要2条slq语句 一条是查询总页数c
  • leetcode刷题-代码训练营-第3章-哈希表

    目录 242 有效的字母异位词 349 两个数组的交集 202 快乐数 1 两数之和 454 四数相加II 383 赎金信 1 暴力解法 2 哈希表解法 15 三数之和 1 哈希解法 2 双指针法 18 四数之和 242 有效的字母异位词
  • Java 微服务框架选型(Dubbo 和 Spring Cloud?)

    微服务 Microservices 是一种架构风格 一个大型复杂软件应用由一个或多个微服务组成 系统中的各个微服务可被独立部署 各个微服务之间是松耦合的 每个微服务仅关注于完成一件任务并很好地完成该任务 在所有情况下 每个任务代表着一个小的
  • 【常见错误】FPGA器件DDR类型选择错误

    ZedBoard开发常见错误 DDR的型号配置错误 间接会导致的结果是 在调试debug时 会发现cpu一直处于running的状态 但是在控制台并不能看到打印的信息 并且不管是只用了PS端或者是PS PL端都用了 都不能在控制台上出现打印
  • 短信验证码

    短信验证码用的是阿里云的 目录结构如下 其中aliyunsdkdysmsapi是在官方下载的 https help aliyun com document detail 55359 html aliyun py coding utf 8 i
  • 注入技术--LSP劫持注入

    1 原理 简单来说 LSP就是一个dll程序 应用程序通过winsock2进行网络通信时 会调用ws2 32 dll的导出函数 如connect accept等 而后端通过LSP实现这些函数的底层 简单来说就是调用winsock2提供的函数
  • 硬件系统工程师宝典(13)-----PCB的布局“有讲究”

    各位同学大家好 欢迎继续做客电子工程学习圈 今天我们继续来讲这本书 硬件系统工程师宝典 上篇我们说到EMC的标准以及提高EMC性能的一些常用方法 今天我们来看看PCB上模块的布局有什么讲究 模块划分及布局 PCB上模块的划分和布局会影响到布
  • Linux  root密码忘记了,怎么办?

    Linux root用户密码忘记了 怎么办 一 清除密码 首先 启动Linux 出现这个画面 有的版本不一定 和这个 一样但是大同小异 注意这句话就行 Press any key to enter the menu 按任意键进入菜单 然后
  • Cocos2d-x Js Binding 的手动绑定实现

    http www ityran com archives 4902 Cocos2d x Js Binding 的手动绑定实现 一叶 cocos2d x 08 13 2304 4条评论 随着 Cocos2d x 的发展 Cocos2d htm
  • Command ‘roscore‘ not found, but can be installed with: sudo apt install python-roslaunch

    ubuntu18 04安装ros melodic时报错 解决方法 查看是否安装包 cd opt ros melodic bin ls 发现没有roscore 安装 在bin目录 sudo apt get install ros melodi
  • NGINX指定启动的配置文件

    若不指定安装路径 nginx默认安装在 usr local nginx路径下 若不指定nginx的配置文件 nginx默认启动找的是同级nginx更路径下的 conf nginx conf配置文件 但该配置文件的所在路径 以及文件名不是绝对
  • git revert后无法merge发生的惨案

    git revert后无法merge发生的惨案 前景描述 目前公司开发模式是这样的 有测试分支test 开发分支dev1 dev2 dev3 dev1 dev2 dev3都是基于test分支拉出来的 各分支如果没有问题后都会合并到test