git-grep(1)
===========

NAME
----
git-grep - Print lines matching a pattern


SYNOPSIS
--------
[verse]
'git grep' [--cached]
	   [-a | --text] [-I] [-i | --ignore-case] [-w | --word-regexp]
	   [-v | --invert-match] [-h|-H] [--full-name]
	   [-E | --extended-regexp] [-G | --basic-regexp]
	   [-F | --fixed-strings] [-n]
	   [-l | --files-with-matches] [-L | --files-without-match]
	   [-z | --null]
	   [-c | --count] [--all-match]
	   [--max-depth <depth>]
	   [--color | --no-color]
	   [-A <post-context>] [-B <pre-context>] [-C <context>]
	   [-f <file>] [-e] <pattern>
	   [--and|--or|--not|(|)|-e <pattern>...] [<tree>...]
	   [--] [<path>...]

DESCRIPTION
-----------
Look for specified patterns in the working tree files, blobs
registered in the index file, or given tree objects.


OPTIONS
-------
--cached::
	Instead of searching in the working tree files, check
	the blobs registered in the index file.

-a::
--text::
	Process binary files as if they were text.

-i::
--ignore-case::
	Ignore case differences between the patterns and the
	files.

-I::
	Don't match the pattern in binary files.

--max-depth <depth>::
	For each pathspec given on command line, descend at most <depth>
	levels of directories. A negative value means no limit.

-w::
--word-regexp::
	Match the pattern only at word boundary (either begin at the
	beginning of a line, or preceded by a non-word character; end at
	the end of a line or followed by a non-word character).

-v::
--invert-match::
	Select non-matching lines.

-h::
-H::
	By default, the command shows the filename for each
	match.  `-h` option is used to suppress this output.
	`-H` is there for completeness and does not do anything
	except it overrides `-h` given earlier on the command
	line.

--full-name::
	When run from a subdirectory, the command usually
	outputs paths relative to the current directory.  This
	option forces paths to be output relative to the project
	top directory.

-E::
--extended-regexp::
-G::
--basic-regexp::
	Use POSIX extended/basic regexp for patterns.  Default
	is to use basic regexp.

-F::
--fixed-strings::
	Use fixed strings for patterns (don't interpret pattern
	as a regex).

-n::
	Prefix the line number to matching lines.

-l::
--files-with-matches::
--name-only::
-L::
--files-without-match::
	Instead of showing every matched line, show only the
	names of files that contain (or do not contain) matches.
	For better compatibility with 'git-diff', --name-only is a
	synonym for --files-with-matches.

-z::
--null::
	Output \0 instead of the character that normally follows a
	file name.

-c::
--count::
	Instead of showing every matched line, show the number of
	lines that match.

--color::
	Show colored matches.

--no-color::
	Turn off match highlighting, even when the configuration file
	gives the default to color output.

-[ABC] <context>::
	Show `context` trailing (`A` -- after), or leading (`B`
	-- before), or both (`C` -- context) lines, and place a
	line containing `--` between contiguous groups of
	matches.

-<num>::
	A shortcut for specifying -C<num>.

-p::
--show-function::
	Show the preceding line that contains the function name of
	the match, unless the matching line is a function name itself.
	The name is determined in the same way as 'git diff' works out
	patch hunk headers (see 'Defining a custom hunk-header' in
	linkgit:gitattributes[5]).

-f <file>::
	Read patterns from <file>, one per line.

-e::
	The next parameter is the pattern. This option has to be
	used for patterns starting with - and should be used in
	scripts passing user input to grep.  Multiple patterns are
	combined by 'or'.

--and::
--or::
--not::
( ... )::
	Specify how multiple patterns are combined using Boolean
	expressions.  `--or` is the default operator.  `--and` has
	higher precedence than `--or`.  `-e` has to be used for all
	patterns.

--all-match::
	When giving multiple pattern expressions combined with `--or`,
	this flag is specified to limit the match to files that
	have lines to match all of them.

`<tree>...`::
	Search blobs in the trees for specified patterns.

\--::
	Signals the end of options; the rest of the parameters
	are <path> limiters.


Example
-------

git grep -e \'#define\' --and \( -e MAX_PATH -e PATH_MAX \)::
	Looks for a line that has `#define` and either `MAX_PATH` or
	`PATH_MAX`.

git grep --all-match -e NODE -e Unexpected::
	Looks for a line that has `NODE` or `Unexpected` in
	files that have lines that match both.

Author
------
Originally written by Linus Torvalds <torvalds@osdl.org>, later
revamped by Junio C Hamano.


Documentation
--------------
Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.

GIT
---
Part of the linkgit:git[1] suite
