首页/开发/Git 与协作速查/git cherry 对比两条分支的提交
合并变基与冲突71 条

git cherry 对比两条分支的提交

按 patch-id 对比,列出哪些提交已在目标分支有等价改动(以 - 标记)或尚未包含(以 + 标记),辅助判断回移是否已做过。

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

git cherry 是什么

按 patch-id 对比两条分支,列出哪些提交已在目标分支存在等价改动(- 标记)或尚未包含(+ 标记):判断 cherry-pick 与回移是否做过时,比肉眼比对可靠。patch-id 按改动内容计算,与提交哈希无关,适合在回移、审计与分支盘点场景快速得到差异集合。

基本信息

用途找出「有等价补丁」与「未包含」的提交
语法git cherry [-v] <上游> <分支>
标记- 上游已有等价改动;+ 尚未包含
-v显示每个提交的标题,便于阅读
只读性纯查询命令,不修改任何引用
原理按 patch-id(改动内容指纹)比较

典型使用场景

  • 回移检查:确认提交是否已打进维护分支,避免重复拣选。
  • 发布审计:列出仍未进入发布分支的修复。
  • 分支盘点:对比两条长期分支的差异集合。
  • 重复排查:发现同一修复被多次拣选时定位重复来源。
  • 流程验证:验证团队回挑清单是否真的完成。
  • 多分支矩阵:脚本对多组分支两两运行,生成回移缺口报表。
  • 教学解释:向团队展示 patch-id 与提交哈希的区别。

常用示例

常用示例
git cherry -v main release/2.x           # 列出对比结果,- 与 + 两类
git cherry main release/2.x | grep '^+' | head   # 只看未包含的提交
# 输出形如:+ sha 标题(未含)或 - sha 标题(已有等价改动)
git log --oneline -5 release/2.x         # 复核分支最近状态

输出标记读法

标记含义后续动作
+目标分支尚未找到等价改动评估是否需要回移
-已存在等价改动(patch-id 相同)无需重复处理
带 -v 的标题对应提交的标题文本人工复核时快速阅读
patch-id 按改动内容计算,与提交哈希无关;用它检查 cherry-pick 是否遗漏比肉眼对比可靠,输出也适合直接喂给脚本做缺口统计;回移前先跑一遍,把它当检查清单而不是最终结论。

易错点

  • 内容相同但上下文被改写的补丁 patch-id 会不同,可能出现假阴性,需结合 diff 复核。
  • 它只做集合比较不改仓库,可放心执行,但别把它当作完整的发布审计依据,配合测试结果一起看。
  • 把默认的上游与分支顺序记反会得到相反的直觉结论,脚本里写清楚参数含义。
  • 补丁拆分方式不同(一条拆成两条提交)时无法一一对应,改用范围 diff 方式核对,或在目标分支搜同一主题的标题。

数据来源与参考

  • Git 官方文档:git-cherry
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌