主线分支:master
① 基于master分支创建一个分支:feature-1,并切换到 feature-1 分支
② 在feature-1分支上进行两次提交
③ 基于master 分支创建一个新的分支:feature-2,并切换到 feature-2 分支
④ 在 feature-2 分支上找到 Log–>Branch–>feature-1 分支的提交记录:
⑤ 在 feature-2 分支上 选择将 feature-1 分支的哪些提交记录合并到 feature-2 ,这样就可以实现将部分提交记录合并到 feature-2 :
⑥ 查看 feature-2 的提交记录,可以看到 feature-2 分支上也有了最新的两条提交记录:
⑦ 将 feature-2 分支提交到远程,以后就可以使用 feature-2 分支开发了
Git Cherry-pick,通常叫做摘樱桃。此为Git 的一种操作,作用是将部分代码从一个分支转移到另一个分支。
一般情况下,我们采用的是 git merge/git rebase的方式来合并两个分支的代码。这种情况,适用于我们需要另一个分支的所有代码变动(包含创建分支前的base代码)。另一种情况是,你只需要部分代码变动(某几个提交),那么就可以采用 Cherry pick。
下面通过一个实例讲解下操作步骤:
分别有A、B两个开发团队做同一个项目,开发侧接到一个版本需求,假定需要在2021.01.21上线,A做财务相关功能,B做服务相关功能。
dev-finance-20210121
。dev-finance-20210121
分支合并到dev
分支。dev-service-20210121
。注意:此时创建的分支包含了A团队提交的内容。dev-service-20210121
分支合并到dev
分支。两边开发完毕,只等测试对不对。但是,突然1月16号,A团队由于依赖方延期原因,上不了线了,产品也同意,需要回退!而B团队的功能正常上线。那么,就得把dev的代码整体回退到未开发之前的版本。duang duang duang,回退成功!此时,dev分支上,缺少了A团队提交的代码,没问题。可是缺少了B团队提交的代码,这怎么能行呢,B还得上线吖。
再次通过merge方式将 dev-service-20210121
分支合并到dev分支?
额,不行, dev-service-20210121
分支创建于A团队提交之后,包含了A提交的代码,这样会把A团队提交的内容整体带过去。
假如重新建分支,再把之前的改动,一段一段代码拷贝进去,这样更不行,太麻烦了,而且容易漏。
怎么办呢?嘿嘿,这时咱们的 Cherry pick 就起作用了。
直接将 dev-service-20210121
分支 Cherry pick 到 dev分支虽然可以实现,但是测试阶段,开发还得改啊。难道每次改了都 Cherry pick 吗?这多麻烦。(dev-service-20210121
分支创建于A团队提交之后,包含了A提交的代码)
此时,采用新建分支+ Cherry pick的方法,之后就可以使用merge方式了。
于是,1月17号,B团队再次从dev
新建一个分支,取名: dev-service-20210121-new
。注意:此时创建的分支不包含A团队提交的内容,因为dev分支已经回退了。
采用 Cherry pick 方式,B团队将 dev-service-20210121
分支上提交的部分合并到 dev-service-20210121-new
分支。
再把 dev-service-20210121-new
分支 merge 到 dev
分支。这时,就实现了dev
分支上,只包含B团队提交的内容。
废弃dev-service-20210121
分支,之后B团队就在 dev-service-20210121-new
分支上修改bug,修改完bug,合到 dev 分支时,想怎么merge怎么merge。
具体操作:
① 将项目切换到新的分支 dev-service-20210121-new
② 打开git Log,找到该module的 git Log 窗口,选择select,查询原来的 dev-service-20210121
分支
③ 从提交历史中,选中需要合并过来的提交内容,右键进行 Cherry pick。(如果有冲突,说明你切换到新分支后,在本地改过代码又没有提交,这时需要解决冲突)
④ 这样就把 原来的 dev-service-20210121
分支需要的提交内容合并到本地啦。当然这个只是在本地,如果要合并到 新分支 dev-service-20210121-new
,还需要push一下(Cherry pick 到本地的代码部分是默认提交的,无需commit了)。
背景:存在两个分支,一个主线分支 master,一个自己的分支 feature-test
如下图为 feature-test 的提交记录,feature-test 分支基于 master 分支又提交了6次记录:
如果我想将自己分支 feature-test 的某几个提交合并到主线分支 master上,就可以使用 cherry-pick。
① 切换到主线分支 master
② 将其他分支(这里指feature-test分支)的代码合并到当前分支(master分支)。查看feature-test 的提交记录,选择要合并到 master 分支的提交,执行 cherry-pick
③ 此时查看 master 分支的提交记录,可以看到 master 分支的最新两条提交是从 feature-test 分支 cherry-pick 过来的,从而实现将自己分支的提交合并到主线分支的目的。
通过 cherry-pick 可以将日常自己分支的提交合并到主线分支 master