Git查询两分支提交差时如何隐藏已被cherry pick的等效提交
实现方法
Git 是基于**补丁ID(Patch ID)**来识别内容等效的提交的,补丁ID仅对提交的实际代码改动做哈希计算,和提交哈希、提交时间、父提交等元数据无关,只要cherry pick时没有修改提交内容,原提交和cherry pick生成的提交补丁ID完全一致,可以被自动识别。你可以通过两种方式实现需求:
方法1:使用专门的git cherry命令(更简单)
git cherry就是专门用于对比两个分支,识别已cherry pick提交的工具,直接执行以下命令:
git cherry -v 你的分支名 master
输出结果里:
- 前缀为
-的提交是已经被cherry pick到你的分支的等效提交,也就是你要排除的m4、m5 - 前缀为
+的提交是master有、你的分支还没迁移的提交,也就是你需要的m6、m7
如果只想过滤出未迁移的提交,可以结合grep:
git cherry -v 你的分支名 master | grep "^+"
方法2:使用git log实现需求
你之前用的参数不生效,是因为没有配合对称差语法和范围过滤参数,正确命令如下:
git log --oneline --cherry-pick --left-only master...你的分支名
参数说明:
master...你的分支名:Git的三点对称差语法,筛选所有存在于master或你的分支、但不存在于两个分支共同祖先之后的公共提交的记录--left-only:仅返回对称差中属于左侧(master分支)的提交--cherry-pick:自动过滤掉左右两侧补丁ID相同的等效提交,也就是已经被cherry pick的m4、m5,最终仅返回m6、m7
注意事项
如果cherry pick过程中你解决过冲突、修改了提交的代码内容,那么原提交和cherry pick后的提交补丁ID会不一致,这种场景下没有自动识别等效提交的方案,需要手动核对。
内容的提问来源于stack exchange,提问作者Hari Sundararajan
相关产品推荐
相关产品推荐

