首页/开发/Git 与协作速查/cherry-pick 合并提交(-m)
合并变基与冲突71 条

cherry-pick 合并提交(-m)

合并提交有两个父提交,拣选时必须用 -m 指定以哪个父为主线;-m <父编号> 表示相对该父提交重放此合并引入的差异。

Git 与协作速查开发更新于 2026-10-13

cherry-pick 合并提交是什么

合并提交有两个父提交,拣选时必须用 -m 指定以哪个父为主线:-m 1 表示相对第一父提交重放这次合并引入的差异。理解父编号顺序是避免把错误一侧内容带过来的关键。

基本信息

语法git cherry-pick -m <父编号> <合并提交>
父编号1 为合并时所在分支(主干侧),2 为被合入分支
查看父git show --no-patch --pretty=%P <合并哈希>
替代方案优先挑拣合并内的普通提交
撤销合并git revert -m <父编号>
常见错误漏掉 -m 直接拣选合并提交会直接报错

典型使用场景

  • 回移功能合并:把一次合并整体搬到维护分支(需精确知道父顺序)。
  • 排查行为差异:对合并提交做拣选以复现引入的变化。
  • 维护线补丁:跨分支搬运优先挑内部普通提交,整体搬只作备选。
  • 撤销合并:用 revert -m 指定主线父,比手工回退安全。
  • 历史分析:确认 -m 取值对结果的影响,验证对父顺序的理解。
  • 工具验证:用 git log --graph --oneline 观察合并结构再决定父编号。
  • 流程规范:团队约定优先挑单提交,减少整体搬合并的操作。

常用示例

常用示例
git show --no-patch --pretty=%P <merge_sha>   # 查看父提交顺序(1 主 2 被合入)
git cherry-pick -m 1 <merge_sha>              # 以第一父为主线重放差异
git log -1 --format='%H %s'                   # 校验拣选结果
# 撤销一次合并:git revert -m 1 <merge_sha>

父编号速查

编号含义典型用法
-m 1以第一父为主线重放差异把合并搬到另一分支
-m 2以第二父为主线重放差异反向搬运合并
不带 -m合并提交无法直接拣选会报错先确定父编号再操作
revert -m 1撤销该合并引入的改动回退一次合并
对合并提交拣选语义容易误解:优先挑拣其内部普通提交;撤销合并需用 git revert -m 指定主线父,选错会撤销错误方向,操作前先在临时分支验证。

易错点

  • 父编号选错会把另一侧内容带过来,先用 git show --pretty=%P 看清新旧父顺序再下命令。
  • 拣选合并提交常产生不直观的差异,评审时要特别说明来龙去脉,避免被当成普通改动。
  • 撤销合并后再合并同一分支,被撤销的改动不会自动回来,需要在文档里写清恢复步骤。
  • 对多方合并提交做 -m 操作更复杂,避免在关键分支上现场实验。

数据来源与参考

  • Git 官方文档:git-cherry-pick(-m)
  • Git 官方文档:git-revert(-m)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌