On Wed, 7 Feb 2007, Don Zickus wrote: > > 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 - To unsubscribe from this list: 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