Git - IDEA 中 Cherry-Pick 实现分支的部分提交合并到主线分支

文章目录

      • 1. 基本操作
      • 2. 应用场景
      • 3. 将自己分支的提交cherry-pick到主线分支

1. 基本操作

主线分支: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 分支开发了

2. 应用场景

Git Cherry-pick,通常叫做摘樱桃。此为Git 的一种操作,作用是将部分代码从一个分支转移到另一个分支。

一般情况下,我们采用的是 git merge/git rebase的方式来合并两个分支的代码。这种情况,适用于我们需要另一个分支的所有代码变动(包含创建分支前的base代码)。另一种情况是,你只需要部分代码变动(某几个提交),那么就可以采用 Cherry pick。

下面通过一个实例讲解下操作步骤:

分别有A、B两个开发团队做同一个项目,开发侧接到一个版本需求,假定需要在2021.01.21上线,A做财务相关功能,B做服务相关功能。

  • A团队提前进入开发,在1月8号从dev新建了一个分支,取名: dev-finance-20210121
  • 1月12号,A团队开发好了,于是通过merge方式将 dev-finance-20210121 分支合并到dev分支。
  • 1月13号,此时B团队忙完了手头的事,进入开发阶段,于是从dev新建另外一个分支,取名: dev-service-20210121。注意:此时创建的分支包含了A团队提交的内容。
  • 1月15号,B团队也开发好了,于是通过merge方式将 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了)。

3. 将自己分支的提交cherry-pick到主线分支

背景:存在两个分支,一个主线分支 master,一个自己的分支 feature-test

如下图为 feature-test 的提交记录,feature-test 分支基于 master 分支又提交了6次记录:

Git - IDEA 中 Cherry-Pick 实现分支的部分提交合并到主线分支_第1张图片

如果我想将自己分支 feature-test 的某几个提交合并到主线分支 master上,就可以使用 cherry-pick。

① 切换到主线分支 master

② 将其他分支(这里指feature-test分支)的代码合并到当前分支(master分支)。查看feature-test 的提交记录,选择要合并到 master 分支的提交,执行 cherry-pick

Git - IDEA 中 Cherry-Pick 实现分支的部分提交合并到主线分支_第2张图片

③ 此时查看 master 分支的提交记录,可以看到 master 分支的最新两条提交是从 feature-test 分支 cherry-pick 过来的,从而实现将自己分支的提交合并到主线分支的目的。

Git - IDEA 中 Cherry-Pick 实现分支的部分提交合并到主线分支_第3张图片

通过 cherry-pick 可以将日常自己分支的提交合并到主线分支 master

你可能感兴趣的:(【Git-代码管理工具】,git,github)