You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何cherry-pick合并提交及被合并提交并保留原结构?

解决方案

git cherry-pick -m1 ABC 会把合并提交ABC相对于第一个父节点(也就是原主分支上的M提交)的所有代码差异打包成单个补丁提交,自然会把DEF、GHI的改动全部揉在一起,不可能保留原分支的多提交结构。

要保留独立提交+合并提交的完整层级,用支持保留合并节点的rebase操作即可,步骤如下:

  • 先找出foobar分支和原主分支的分叉点(也就是GHI提交的父节点),执行命令:
git merge-base ABC^1 ABC^2

把命令输出的提交SHA记为BASE_SHA。

  • 切到你要接入这些提交的目标分支,执行以下命令迁移全量提交:
git rebase --rebase-merges BASE_SHA --onto HEAD ABC

命令执行完成后查看提交历史,就能看到和原分支完全一致的结构:按顺序先存在did other stuff(原GHI提交)、再存在did stuff(原DEF提交),最后是对应的合并提交节点,所有提交互相独立,不会被压缩成单提交。

注意事项

  • 2.22以下的旧版本Git没有--rebase-merges参数,可以替换为-p(--preserve-merges)实现相同效果,不过新版参数的冲突处理逻辑更合理,优先升级Git后使用新参数。
  • rebase过程中如果遇到冲突,按普通rebase的流程处理即可:手动解决冲突文件的内容矛盾,执行git add <冲突文件路径>标记解决,再运行git rebase --continue推进流程,直到rebase完成。
  • 如果你不需要保留最后的合并提交节点,只是想把foobar分支上的两个业务提交按原顺序应用到目标分支,不需要走rebase流程,直接执行git cherry-pick GHI DEF就能按顺序拣选两个独立提交,改动不会被压缩。

内容的提问来源于stack exchange,提问作者patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:27:25