Git:使用JetBrains-IDEA环境中的cherry-pick功能进行分支的合并
一、简介
在多人协作开发中,Git是一种常用的版本控制工具。使用Git时往往会伴随着各种分支的合并操作。
二、问题现状
例如A同学做了一个功能,他的代码需要提交到SIT分支(测试环境分支),以便把任务移交给负责测试的同学进行下一步的发版、测试、BUG报告生成等一系列的操作,那么分支合并便成为了开发工作中较为关键的一个步骤。在这个步骤中可能会出现的问题但不限于:1、自己的代码把别人的代码覆盖了,导致别人的功能校验不通过。2、自己的代码与目标分支的代码产生冲突,无法完成合并。3、别的同学把你的代码给覆盖了。4、你的代码有些测试不通过,有些是验证通过可以合并到master(生产)分支上的。
在这个时候你可能会慌了,因为自己写了这么多的东西,还要一个一个重新检查然后push到目标分支上,这个工作量是会随着代码量而不断递增的。
前三个问题常见的解决方法是把目标分支的代码pull到自己的开发分支上,然后逐个解决pull过程产生的conflicts,最后再把自己的分支与目标分支合并。这个方法如果是以功能进行分支的划分,并且代码改动量比较少,以及自己的功能和别的同学的功能交互程度不大的情况下是可行的,不过看起来不太聪明,而且分支会越来越来多,开发时切换分支或者pull操作会很频繁。
第四个问题与前三个问题的解决方法也是异曲同工之妙,首先从目标分支New一个branch,接着把自己正确的文件从旧分支复制到该branch上,最后合并到目标分支上。这种解决方法遇到改动文件量特别大的时候就不work啦,因为复制的时候可能会遗漏掉部分文件,或许也会把别人的代码给覆盖掉。
三、解决方法
有没有一种方法可以完美解决这种问题呢?
有!
如果你是使用JetBrains家的IDEA工具进行开发的,那么恭喜你,可以使用cherry-pick功能进行分支的合并啦~
(1)场景分析
我以A同学的开发分支dev_A、B同学的开发分支dev_B、uat测试分支、master生产分支,四个分支进行举例。具体的场景为:A同学和B同学分别开发两个模块:FeatureA、FeatureB,以包名作为划分的标准;接着A同学和B同学开发完成后把各自的代码提交到了uat分支,交付给测试同学进行测试;测试同学认定A同学代码全部通过,B同学代码部分通过,需要把这两部分的代码提交到master生产分支上。
简单的示意图如下:
FeatureA分支需要提交的文件:
FeatureB分支需要提交的文件:
(2)解决方案
使用cherry-pick一共分为以下三大步:
- 先切换到自己最终想要合并代码的分支(master)上,然后右击自己的项目——选择Git——选择Show History,在弹出来的历史面板中选择Log。
这里可以看到所有分支的提交记录,支持根据分支、用户、日期、路径条件进行筛选。 - 这里选择UAT分支,并点击想要提交的记录。
大家可以从右侧点击查看所要提交的内容。 - 在选中的记录上右击选择【cherry-pick】,IDEA会按每条记录的顺序依次弹出提示改动的内容,可以自己的需要选择commit或者push等的操作。
如图所示:
(3)结论
随着JetBrains-IDEA的升级,cherry-pick功能变得越来越强大了。大家以后在进行Git分支合并操作时不妨使用cherry-pick这种功能进行相应的处理,也许能达到事半功倍的效果哦~