git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/3] doc: patch-id: add script example

From
D. Ben Knoble <ben.knoble@gmail.com>
Date
Feb 8, 2026, 02:34 UTC
Message-ID
<CALnO6CC997noiLAFmsy=4DCxc-d5CzaJew0Ri1x6CUtnL4kLXA@mail.gmail.com>
In-Reply-To
<mapper_example.277@msgid.xyz>
On Sat, Feb 7, 2026 at 10:07 AM <kristofferhaugsbakk@fastmail.com> wrote:
Show 69 quoted lines
>
> From: Kristoffer Haugsbakk <code@khaugsbakk.name>
>
> The utility and usability of git-patch-id(1) was discussed
> relatively recently:[1]
>
>     Using "git patch-id" is definitely in the "write a script for it"
>     category. I don't think I've ever used it as-is from the command
>     line as part of a one-liner. It's very much a command that is
>     designed purely for scripting, the interface is just odd and baroque
>     and doesn't really make sense for one-liners.
>
>     The typical use of patch-id is to generate two *lists* of patch-ids,
>     then sort them and use the patch-id as a key to find commits that
>     look the same.
>
> The command doc *could* use an example, and since it is a mapper command
> it makes sense for that example to be a little script.
>
> Mapping the commits of some branch to an upstream ref allows us to
> demonstrate generating two lists, sorting them, joining them, and
> finally discarding the patch ID lookup column with cut(1).
>
> [1]: https://lore.kernel.org/workflows/CAHk-=wiN+8EUoik4UeAJ-HPSU7hczQP+8+_uP3vtAy_=YfJ9PQ@mail.gmail.com/
>
> Inspired-by: Linus Torvalds <torvalds@linux-foundation.org>
> Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name>
> ---
>
> Notes (series):
>     The script will not list the commits in rev-list order because of
>     the sorting.
>
>  Documentation/git-patch-id.adoc | 38 +++++++++++++++++++++++++++++++++
>  1 file changed, 38 insertions(+)
>
> diff --git a/Documentation/git-patch-id.adoc b/Documentation/git-patch-id.adoc
> index e95391cd255..19780f86425 100644
> --- a/Documentation/git-patch-id.adoc
> +++ b/Documentation/git-patch-id.adoc
> @@ -68,6 +68,44 @@ This is the default if `patchid.stable` is set to `true`.
>  +
>  This is the default.
>
> +EXAMPLES
> +--------
> +
> +linkgit:git-cherry[1] shows what commits from a branch have patch ID
> +equivalent commits in some upstream branch. But it only tells you
> +whether such a commit exists or not. What if you wanted to know the
> +relevant commits in the upstream? We can use this command to make a
> +mapping between your branch and the upstream branch:
> +
> +----
> +#!/bin/sh
> +
> +upstream="$1"
> +branch="$2"
> +test -z "$branch" && branch=HEAD
> +limit="$3"
> +if test -n "$limit"
> +then
> +    tail_opts="$limit".."$upstream"
> +else
> +    since=$(git log --format=%aI "$upstream".."$branch" | tail -1)
> +    tail_opts=--since="$since"' '"$upstream"
> +fi
> +for_branch=$(mktemp)
> +for_upstream=$(mktemp)

Do we want to delete these when we are done (via trap or just cleanup at the end)?

Show 20 quoted lines
> +
> +git rev-list --no-merges "$upstream".."$branch" |
> +    git diff-tree --patch --stdin |
> +    git patch-id  --stable | sort >"$for_branch"
> +git rev-list --no-merges $tail_opts |
> +    git diff-tree --patch --stdin |
> +    git patch-id  --stable | sort >"$for_upstream"
> +join -a1 "$for_branch" "$for_upstream" | cut -d' ' -f2,3
> +----
> +
> +Now the first column shows the commit from your branch and the second
> +column shows the patch ID equivalent commit, if it exists.
> +
>  GIT
>  ---
>  Part of the linkgit:git[1] suite
> --
> 2.53.0.26.g2afa8602a26
>
>
-- 
D. Ben Knoble
Previous: kristofferhaugsbakk@fastmail.comNext: Kristoffer Haugsbakk
Message 4 of 15 in “doc: patch-id: explain how to map efficiently”
  1. 0/3 doc: patch-id: explain how to map efficientlykristofferhaugsbakk@fastmail.com, Feb 7, 2026
  2. 1/3 doc: patch-id: emphasize multi-patch processingkristofferhaugsbakk@fastmail.com, Feb 7, 2026
  3. 2/3 doc: patch-id: add script examplekristofferhaugsbakk@fastmail.com, Feb 7, 2026
  4. D. Ben KnobleFeb 8, 2026
  5. Kristoffer HaugsbakkFeb 8, 2026
  6. 3/3 doc: patch-id: see also git-cherry(1)kristofferhaugsbakk@fastmail.com, Feb 7, 2026
  7. D. Ben KnobleFeb 8, 2026
  8. 0/3 doc: patch-id: explain how to map efficientlykristofferhaugsbakk@fastmail.com, Feb 14, 2026
  9. 1/3 doc: patch-id: emphasize multi-patch processingkristofferhaugsbakk@fastmail.com, Feb 14, 2026
  10. 2/3 doc: patch-id: add script examplekristofferhaugsbakk@fastmail.com, Feb 14, 2026
  11. 3/3 doc: patch-id: see also git-cherry(1)kristofferhaugsbakk@fastmail.com, Feb 14, 2026
  12. Ben KnobleFeb 14, 2026
  13. Junio C HamanoFeb 20, 2026
  14. Ben KnobleFeb 21, 2026
  15. Kristoffer HaugsbakkFeb 23, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.