Jeff King <peff@xxxxxxxx> writes: > This patch defines the patch-id of a merge commit as > essentially "null"; it has no patch-id. As a result, > merges cannot match patch-ids via "--cherry-pick", and > "format-patch --base" will not list merges in its list of > prerequisite patch ids. At first I wondered if such a change would make all merges look the same, but the patch-ids.c comparison is not for ordering/sorting but only for equality, so as long as the comparison function knows that a comparison of anything with "null" yields "They are different", we are OK. > diff --git a/patch-ids.c b/patch-ids.c > index 77e4663..8d06099 100644 > --- a/patch-ids.c > +++ b/patch-ids.c > @@ -7,18 +7,40 @@ > int commit_patch_id(struct commit *commit, struct diff_options *options, > unsigned char *sha1, int diff_header_only) > { > - if (commit->parents) > + if (commit->parents) { > + if (commit->parents->next) > + return PATCH_ID_NONE; > diff_tree_sha1(commit->parents->item->object.oid.hash, > commit->object.oid.hash, "", options); > - else > + } else > diff_root_tree_sha1(commit->object.oid.hash, "", options); > diffcore_std(options); > - return diff_flush_patch_id(options, sha1, diff_header_only); > + if (diff_flush_patch_id(options, sha1, diff_header_only)) > + return PATCH_ID_ERROR; > + return PATCH_ID_OK; > +} Looks sensible. Thanks.