显示git提交日志时如何忽略cherry-pick的提交

假设有2个分支,一个是master分支,一个是b1分支。在b1分支上有1, 2, 3, 4四个提交。master分支上有自己的提交a, b和c,同时也cherry-pick了b1分支上的1, 2提交,称之为1‘, 2'。b1分支和master分支有一个公共的祖先B。git提交历史如下图。

                    1---2---3---4     (b1)
                   /                     
                  B--a--1'---2'---b---c    (master)

此时如何知道b1分支上还有哪几个提交没有在master上?(应该是3和4提交没有在master分支上)

可以使用命令(注意是用三点表示的git提交范围):git log --cherry-pick --left-only --no-merges b1...master

其中:

  --cherry-pick: 指示忽略cherry-pick的提交,它会先比较commit-id,然后再比较patch-id来确定是否为cherry-pick提交。

 --left-only: 只显示左边分支上的提交,默认是显示两边分支上的提交

 --no-merges: 不显示合并点的提交

注意:如果在cherry-pick时产生了冲突,解决冲突后的提交,此时patch-id发生了变化,不会被认为是cherry-pick提交。


patch-id是对修改集(change set)得到的一个hash值,可以用下面的命令看一个提交的patch-id:

               git show <commit> | git patch-id

其中<commit>可以是一个提交的hash值,或者用HEAD表示最后的提交。输出的结果中,第一个为patch-id,第二个为commit-id。

你可能感兴趣的:(显示git提交日志时如何忽略cherry-pick的提交)