当前位置: 首页 > news >正文

利用cherry pick巧妙地将某次提交单独合并到其他分支

0. 引言

最近在进行系统的多版本并行开发,涉及一些共有基础功能提交时就遇到了麻烦,一份代码需要向多个版本分支进行同步,以保证多版本都能有更新该基础功能。

多次对比提交的方式显然会带来巨大的工作量。但实际上我们可以通过git的cherry-pick指令来简化操作
在这里插入图片描述

1. cherry-pick简介

cherry-pick 其作用就是将其他分支的单个提交合并到当前分支,其名字也很贴合——“摘樱桃”,从分支树上摘下来指定的几颗。

其应用场景包括:
合并单个提交:当我们只想将某个分支上的某一次提交合并到当前分支时,可以使用cherry-pick命令,而不需要合并整个分支

修复bug:当我们在一个分支上修复了一个bug,并希望将这个修复同步应用到其他分支时

共性功能:当我们在一个分支上开发了一个新功能,这个功能可能属于基础性通用功能,也希望应用到其他版本时

2. idea界面操作

1、首先为了模拟操作,我这里创建了两个分支:feature-v1.0, feature-v2.0。我们需要模拟的场景是:

  1. 在v1.0版本中开发并提交了一次通用功能
  2. 需要将v1.0提交的这次通用功能合并到v2.0版本中

我们首先在v1.0中模拟一次代码提交
在这里插入图片描述

2、然后右下角将分支切换到v2.0
在这里插入图片描述
3、点击左下角的Git选项,打开git提交历史,并在菜单左侧选中来源分支,即v1.0
在这里插入图片描述
4、找到我们要合并的提交,并选中,然后点击窗口中的樱桃图标,或者右键菜单中点击Cherry-Pick,如果需要合并多次提交的话,就都选中然后点击cherry-pick即可

在这里插入图片描述
5、成功合并后会看到提示信息
在这里插入图片描述
6、需要注意的是,如果前面选择的分支是本地分支,那么还要将合并的代码提交到远端分支
在这里插入图片描述
7、合并后,我们就可以在本地以及远端分支都看到这次提交的代码了
在这里插入图片描述
在这里插入图片描述

3. git指令操作

1、首先进入到项目目录下,切换分支到来源分支v1.0

git checkout feature-v1.0

然后执行git log指令,查看历史提交记录
在这里插入图片描述
2、每次提交都有一个唯一的hash标识,找到你想要合并的那次提交,复制其hash

hash如:4bfc117cd967eaa56e0835847e901becf3787b25
在这里插入图片描述

3、切换到目标分支

git checkout feature-v2.0

4、执行cherry-pick指令,其指令语法如下,其中commit表示某次提交的hash值或者分支名,如果是分支名会将这个分支的提交都合并过去

git cherry-pick <commit>

如果需要合并多次,就将hash值用空格隔开即可

git cherry-pick hash1 hash2 hash3

我们将之前复制的hash值贴过来执行

git cherry-pick 4bfc117cd967eaa56e0835847e901becf3787b25

如此代码就合并过来了
在这里插入图片描述
5、当然这里还只是提交到本地分支,如果要提交到远端的话,执行git push推送即可

在这里插入图片描述

总结

如上,我们就完成了针对某次提交的单独合并操作,实际操作时更加建议使用idea的可视化操作,毕竟可能会涉及到代码冲突,这时就需要我们手动解决冲突了

相关文章:

  • 【华为OD机试-C卷D卷-200分】反射计数(C++/Java/Python)
  • MySQL中如何知道数据库表中所有表的字段的排序规则是什么?
  • 话术巧妙分隔沟通效果更佳看看这个小技巧
  • 开源大模型与闭源大模型:谁将引领AI的未来?
  • 二叉树,先序遍历、中序遍历、后序遍历和层序遍历实现 C++
  • 【quarkus系列】解决native包反射问题之RegisterForReflection 注解
  • 【八股系列】谈谈关于对webpack热更新的原理?
  • Golang | Leetcode Golang题解之第114题二叉树展开为链表
  • 装机必备——360压缩安装教程
  • Kubernetes集群上的Etcd备份和恢复
  • 汇编原理()二进制 跳转指令
  • 蒲公英旁路组网:总部旁路,分部一级组网方案
  • 安卓六种页面加载优化方案对比总结
  • Linux安装PostgreSQL脚本
  • 装饰模式:鸡腿堡
  • [译]如何构建服务器端web组件,为何要构建?
  • 【剑指offer】让抽象问题具体化
  • AngularJS指令开发(1)——参数详解
  • java 多线程基础, 我觉得还是有必要看看的
  • java8-模拟hadoop
  • overflow: hidden IE7无效
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • spring + angular 实现导出excel
  • Spring声明式事务管理之一:五大属性分析
  • 闭包,sync使用细节
  • 电商搜索引擎的架构设计和性能优化
  • 欢迎参加第二届中国游戏开发者大会
  • 王永庆:技术创新改变教育未来
  • 微服务框架lagom
  • 移动端解决方案学习记录
  • 用jQuery怎么做到前后端分离
  • 正则表达式
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • ‌JavaScript 数据类型转换
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • #ifdef 的技巧用法
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • ( 10 )MySQL中的外键
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (SpringBoot)第七章:SpringBoot日志文件
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (多级缓存)缓存同步
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (转)【Hibernate总结系列】使用举例
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • ***利用Ms05002溢出找“肉鸡
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .ai域名是什么后缀?
  • .net6+aspose.words导出word并转pdf
  • .py文件应该怎样打开?
  • [14]内置对象
  • [2024-06]-[大模型]-[Ollama]- WebUI
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [C++初阶]list的模拟实现
  • [Cocoa]iOS 开发者账户,联机调试,发布应用事宜