如何 cherry-pick 多个提交

cherry-pick 多个提交:连续的用范围 git cherry-pick A^..B(含 A)或 A..B(不含 A);不连续的逐个列出 git cherry-pick A B C。冲突时解决后 git cherry-pick --continue。

最佳实践
Git 提交历史与版本恢复示意

连续一段提交用范围:git cherry-pick <起点>^..<终点>(含起点;写 起点..终点 则不含起点)。不连续的提交直接列哈希:git cherry-pick A B C,按列出顺序逐个应用。

连续范围

# 把 feature 分支上最近 3 个提交搬到当前分支
git cherry-pick feature-x~3..feature-x

# 明确范围(包含起点提交本身要用 ^)
git cherry-pick a1b2c3d^..e4f5a6b

不连续提交

git cherry-pick a1b2c3d f7a8b9c

显式列出提交时按给定顺序应用,冲突会暂停。范围表达式按可达历史选提交,合并历史可能包含侧分支,先用 git log 核对;根提交没有 ^ 父节点。

冲突处理

# 解决冲突文件后
git add <冲突文件>
git cherry-pick --continue
# 放弃整个序列
git cherry-pick --abort
# 跳过当前这个
git cherry-pick --skip

实用选项

  • -n(--no-commit):只应用改动不提交,多个提交攒成一个;
  • -x:通常在无冲突的拣选提交信息里追加来源提交哈希;有冲突时应检查最终说明是否保留来源,便于追溯((cherry picked from ...));
  • -e:应用时编辑提交信息。

常见问题(FAQ)

Q:cherry-pick 和 merge 怎么选?

merge 带走整个分支的全部历史;cherry-pick 只摘指定提交(会产生新哈希)。热修复回合到旧版本分支、只要某几个提交时用 cherry-pick;完整合并特性用 merge。

Q:同一个提交 cherry-pick 两次会怎样?

若改动已经存在,第二次常变成空提交并暂停,或按版本及选项跳过/保留;也可能因后续修改产生冲突,不保证生成两个内容重复的提交。尽量避免,或在提交信息里注明来源(-x)方便排查。

Q:merge 提交能 cherry-pick 吗?

可以但要指定主线:-m 1(以第一个父提交为基准)。一般不建议摘 merge 提交,改摘其内部的具体提交更清晰。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台