Git-cherry pick
实习开发中遇到的一个情况:客户有一个定制化需求,基于客户使用的现场版本是2.5.0,结果产品经理对接错了版本,以至于前后端的开发都是基于2.6.0版本来做的,直到最后打包部署上线时无法部署才发现这个问题…
针对解决方案,师兄让我先尝试cherry pick,如果解决不了的话就只能手搓代码了
最后结果是前后端都通过git的cherry pick解决了问题,之前都不知道这个技术,所以来记录学习这个趣名技术🍒
适应场景
在利用Git管理的多分支代码库中,将代码从一个分支转移到另一个分支是常见需求。
这时分两种情况:
- 需要另一个分支的所有代码变动,那么就采用合并(git merge);
- 只需要部分代码变动(某几个提交),这时可以采用 Cherry pick。
针对情况2中的需要部分代码变更,有什么场景呢?
- 修复bug
- 如果在某个分支上修复了一个bug,那么可以通过 cherrt-pick 将这个修复提交到替他分支,而不需要合并整个分支
- 提取特定功能
- 如果某个分支上开发了一个新功能,想将这个功能的提交应用到其他分支,也可以使用 cherrt-pick,比如在客户的定制化版本上做了一个审计日志的字段补全功能,可以将其也迁移到saas主版本上
- 避免合并冲突
- 但那个两个分支的差异较大,直接合并可能会导致冲突,则可以通过 cherrt-pick选择性提交,比如这次的事故就是这种情况
idea实操
cherrt-pick 的整体操作都是类似于merge的:
-
切换到目标分支a
-
在待pick分支b的commit中选中想要复制的提交
-
点击小樱桃进行合并
-
解决冲突
合并过程中少不了出现冲突需要手动处理,大致过程如下
- 点击冲突,进入冲突详情页
通过点击箭头来快速进行版本比对选择
解决所有冲突点击apply后改动就会有一次自动commit让你选择,你也可以取消后手动commit,可以看到改动过已经进入待commit列表了(如果选择的是多次commit,则会对每个commit依次检测冲突,提交commit)
有关git还是有很多要学习的地方,即使在写这篇文章的时候,分支切来切去还是被搞昏了,多分支管理这一块…