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

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


SYNOPSIS
--------
[verse]
'git grep' [-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]
	   [(-O | --open-files-in-pager) [<pager>]]
	   [-z | --null]
	   [-c | --count] [--all-match] [-q | --quiet]
	   [--max-depth <depth>]
	   [--color[=<when>] | --no-color]
	   [-A <post-context>] [-B <pre-context>] [-C <context>]
	   [-f <file>] [-e] <pattern>
	   [--and|--or|--not|(|)|-e <pattern>...]
	   [--cached | --no-index | <tree>...]
	   [--] [<pathspec>...]

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


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

--no-index::
	Search files in the current directory, not just those tracked by git.

-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`.

-O [<pager>]::
--open-files-in-pager [<pager>]::
	Open the matching files in the pager (not the output of 'grep').
	If the pager happens to be "less" or "vi", and the user
	specified only one pattern, the first file is positioned at
	the first match automatically.

-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[=<when>]::
	Show colored matches.
	The value must be always (the default), never, or auto.

--no-color::
	Turn off match highlighting, even when the configuration file
	gives the default to color output.
	Same as `--color=never`.

-[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.

-q::
--quiet::
	Do not output matched lines; instead, exit with status 0 when
	there is a match and with non-zero status when there isn't.

<tree>...::
	Instead of searching tracked files in the working tree, search
	blobs in the given trees.

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

<pathspec>...::
	If given, limit the search to paths matching at least one pattern.
	Both leading paths match and glob(7) patterns are supported.

Examples
--------

git grep 'time_t' \-- '*.[ch]'::
	Looks for `time_t` in all tracked .c and .h files in the working
	directory and its subdirectories.

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
