With these patches, you can say git format-patch --ignore-if-in-upstream upstream to get a series of only the patches which are in HEAD, but not upstream. The first patch adds diff_flush_patch_id() to calculate the patch id, after a diff queue was set up. (Earlier, I sent out a version which also adds a command line option to the diff family, but I'll postpone that until Timo's patches went in). The second patch adds the actual patch id checking. There are two tricky things involved: - I add a pseudo-object for each patch of the upstream, which has the patch id as sha1. This is no real object, but since we rely on the hashes being unique for all practical purposes, and since it has parsed == 0, it should be no problem. - To add the patch ids of the upstream, the revision walker must be called twice. So, if format-patch was called with a range "a..b" (a single revision "a" is handled as "a..HEAD" by format-patch), a revision walker is set up for "b..a", and the patch ids are calculated and stored. This is done by toggling the UNINTERESTING bits of both pending objects. After that, the flags of all objects are reset to 0, so that the revisions can be walked again. The flags of the two pending objects are then reset to their original state. Note that "--numbered" still works. WARNING: since it is quite late in this part of the world, _and_ I am known to produce not-always-optimal patches which could eat your children, please give this a good beating. Ciao, Dscho - : send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html