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 指定主线父,选错会撤销错误方向,操作前先在临时分支验证。