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

Re: git log filtering

From
Linus Torvalds <torvalds@linux-foundation.org>
Date
Feb 7, 2007, 17:12 UTC
Message-ID
<Pine.LNX.4.64.0702070856190.8424@woody.linux-foundation.org>
In-Reply-To
<68948ca0702070841m76817d9el7ce2ec69835c50e@mail.gmail.com>
On Wed, 7 Feb 2007, Don Zickus wrote:
Show 10 quoted lines
>
> I was curious to know what is the easiest way to filter info inside a
> commit message.
> 
> For example say I wanted to find out what patches Joe User has
> submitted to the git project.
> I know I can do something like ' git log |grep -B2 "^Author: Joe User"
> ' and it will output the matches and the commit id.  However, if I
> wanted to filter on something like "Signed-off-by: Joe User", then it
> is a little harder to dig for the commit id.
There are two ways:
 - "git log" can itself do a lot of filtering. Both on date, on revisions, 
   on "modifies files/directories X, Y and Z" _and_ on strings.
   See "man git-rev-list" for more (it doesn't apply to just "git log", it 
   applies to just about any revision listing, including gitk etc)
   For example,
	git log [--author=pattern] [--committer=pattern] [--grep=pattern]
   will likely do exactly what you want. You can do
	git log --grep="Signed-off-by:.*akpm"
   on the kernel archive to see which ones were signed off by Andrew.

So the above works, and catches *most* uses. But it has problems if you want to do something fancier (and I think that includes something as simple as doing a case-insensitive grep). So the other approach is:

 - The hacky way: use "git log --pretty -z", and GNU grep -z:
	git log --pretty -z |
		grep -i -z Signed-off-by:.*junkio |
		tr '\0' '\n'
   which allows you to do anything you want with grep (or other unix tools 
   that take zero-terminated output).
> Is there a better way of doing this?  Or should I accept the fact that
> git wasn't designed to filter info like this very quickly?

Git definitely was designed to do it. The "-z" option in particular is very much designed for any generic UNIX scripting, but the *easy* cases git does internally.

		Linus
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 5 of 34 in “git log filtering”
  1. Don ZickusFeb 7, 2007
  2. Jakub NarebskiFeb 7, 2007
  3. Uwe Kleine-KönigFeb 7, 2007
  4. Johannes SchindelinFeb 7, 2007
  5. Linus TorvaldsFeb 7, 2007
  6. Johannes SchindelinFeb 7, 2007
  7. Linus TorvaldsFeb 7, 2007
  8. Fix "git log -z" behaviourLinus Torvalds, Feb 7, 2007
  9. Junio C HamanoFeb 7, 2007
  10. Don ZickusFeb 7, 2007
  11. Linus TorvaldsFeb 7, 2007
  12. Junio C HamanoFeb 8, 2007
  13. Junio C HamanoFeb 10, 2007
  14. Junio C HamanoFeb 10, 2007
  15. Linus TorvaldsFeb 10, 2007
  16. Don ZickusFeb 7, 2007
  17. Linus TorvaldsFeb 7, 2007
  18. Linus TorvaldsFeb 7, 2007
  19. Junio C HamanoFeb 7, 2007
  20. Linus TorvaldsFeb 7, 2007
  21. Jeff KingFeb 8, 2007
  22. Johannes SchindelinFeb 8, 2007
  23. Jeff KingFeb 8, 2007
  24. Johannes SchindelinFeb 9, 2007
  25. Shawn O. PearceFeb 9, 2007
  26. Johannes SchindelinFeb 9, 2007
  27. Sergey VlasovFeb 9, 2007
  28. Jeff KingFeb 9, 2007
  29. Johannes SchindelinFeb 9, 2007
  30. Jeff KingFeb 9, 2007
  31. Johannes SchindelinFeb 9, 2007
  32. pcre performance, was Re: git log filteringJohannes Schindelin, Mar 7, 2007
  33. Paolo BonziniMar 7, 2007
  34. Horst H. von BrandFeb 8, 2007

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.