【git基础】cherry-pick 使用

3,081 阅读2分钟

1、cherry-pick 理解

cherry-pick 是什么?简单来讲,把某个分支指定 commit,移到当前分支。常应用场景是hotfix。看下图:

2、cherry-pick 使用

cherry-pick 主要应用场景或作用,避免分支 merge后, commit 大规模合并。

1、当个 commit 合并,并增减新的 commit。

git cherry-pick <commit-id>

2、当个 commit 合并,保留原来的commit信息。

git cherry-pick -x <commit_id>

3、批量合并

git cherry-pick <start-commit-id>…<end-commit-id>

可以看到,它的范围就是 start-commit-id 到 end-commit-id 之间所有的 commit,但是它这是一个 (左开,右闭] 的区间,也就是说,它将不会包含 start-commit-id 的 commit。 而如果想要包含 start-commit-id 的话,就需要使用 ^ 标记一下,就会变成一个 [左闭,右闭] 的区间,具体命令如下。

git cherry-pick <start-commit-id>^...<end-commit-id>

3、使用场景——优化 merge request 流程

通常在 gitflow 代码管理模型里,我们合并一个 merge request 经 3 个步骤:

  • 第 1 步,将 feature 分支切一个 feature-copy 分支出来
  • 第 2 步,用 feature-copy 去 rabase代码,如果有冲突解决冲突,
  • 第 3 步,然后在完成 pr 后删除 feature-copy。

在这个过程第 2 步,如果 rebase 的冲突 commit 过多,那么每次 rebase 去解决冲突是个很痛苦的过程,且并不能保证每次都能正确解决冲突

这时我们用 cherry-pick 来改进一下步骤,如下:

  • 第 1 步,将 feature 分支切一个 feature-copy 分支出来,feature-copy 分支一直会保留。
  • 第 2 步,将 feature 分支新增 commit,用 cherry-pick 移植到 feature-copy 分支上。
  • 第 3 步,用 feature-copy 分支去 rabase 代码,如果有冲突解决冲突,这时解决过的冲突不需要解决第 2 次。