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

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


SYNOPSIS
--------
[synopsis]
git grep [-a | --text] [-I] [--textconv] [-i | --ignore-case] [-w | --word-regexp]
	   [-v | --invert-match] [-h|-H] [--full-name]
	   [-E | --extended-regexp] [-G | --basic-regexp]
	   [-P | --perl-regexp]
	   [-F | --fixed-strings] [-n | --line-number] [--column]
	   [-l | --files-with-matches] [-L | --files-without-match]
	   [(-O | --open-files-in-pager) [<pager>]]
	   [-z | --null]
	   [ -o | --only-matching ] [-c | --count] [--all-match] [-q | --quiet]
	   [--max-depth <depth>] [--[no-]recursive]
	   [--color[=<when>] | --no-color]
	   [--break] [--heading] [-p | --show-function]
	   [-A <post-context>] [-B <pre-context>] [-C <context>]
	   [-W | --function-context]
	   [(-m | --max-count) <num>]
	   [--threads <num>]
	   [-f <file>] [-e] <pattern>
	   [--and|--or|--not|(|)|-e <pattern>...]
	   [--recurse-submodules] [--parent-basename <basename>]
	   [ [--[no-]exclude-standard] [--cached | --untracked | --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.  Patterns
are lists of one or more search expressions separated by newline
characters.  An empty string as search expression matches all lines.


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

`--untracked`::
	In addition to searching in the tracked files in the working
	tree, search also in untracked files.

`--no-index`::
	Search files in the current directory that is not managed by Git,
	or by ignoring that the current directory is managed by Git.  This
	is rather similar to running the regular `grep`(1) utility with its
	`-r` option specified, but with some additional benefits, such as
	using pathspec patterns to limit paths;  see the `pathspec` entry
	in linkgit:gitglossary[7] for more information.
+
This option cannot be used together with `--cached` or `--untracked`.
See also `grep.fallbackToNoIndex` in 'CONFIGURATION' below.

`--no-exclude-standard`::
	Also search in ignored files by not honoring the `.gitignore`
	mechanism. Only useful with `--untracked`.

`--exclude-standard`::
	Do not pay attention to ignored files specified via the `.gitignore`
	mechanism.  Only useful when searching files in the current directory
	with `--no-index`.

`--recurse-submodules`::
	Recursively search in each submodule that is active and
	checked out in the repository.  When used in combination with the
	_<tree>_ option the prefix of all submodule output will be the name of
	the parent project's _<tree>_ object.  This option cannot be used together
	with `--untracked`, and it has no effect if `--no-index` is specified.

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

`--textconv`::
	Honor textconv filter settings.

`--no-textconv`::
	Do not honor textconv filter settings.
	This is the default.

`-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 value of -1 means no limit.
	This option is ignored if _<pathspec>_ contains active wildcards.
	In other words if "a*" matches a directory named "a*",
	"*" is matched literally so `--max-depth` is still effective.

`-r`::
`--recursive`::
	Same as `--max-depth=-1`; this is the default.

`--no-recursive`::
	Same as `--max-depth=0`.

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

`-P`::
`--perl-regexp`::
	Use Perl-compatible regular expressions for patterns.
+
Support for these types of regular expressions is an optional
compile-time dependency. If Git wasn't compiled with support for them
providing this option will cause it to die.

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

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

`--column`::
	Prefix the 1-indexed byte-offset of the first match from the start of the
	matching line.

`-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. The `pager` argument is
	optional; if specified, it must be stuck to the option
	without a space. If `pager` is unspecified, the default pager
	will be used (see `core.pager` in linkgit:git-config[1]).

`-z`::
`--null`::
	Use \0 as the delimiter for pathnames in the output, and print
	them verbatim. Without this option, pathnames with "unusual"
	characters are quoted as explained for the configuration
	variable `core.quotePath` (see linkgit:git-config[1]).

`-o`::
`--only-matching`::
	Print only the matched (non-empty) parts of a matching line, with each such
	part on a separate output line.

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

`--break`::
	Print an empty line between matches from different files.

`--heading`::
	Show the filename above the matches in that file instead of
	at the start of each shown line.

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

`-<num>`::
`-C <num>`::
`--context <num>`::
	Show _<num>_ leading and trailing lines, and place a line
	containing `--` between contiguous groups of matches.

`-A <num>`::
`--after-context <num>`::
	Show _<num>_ trailing lines, and place a line containing
	`--` between contiguous groups of matches.

`-B <num>`::
`--before-context <num>`::
	Show _<num>_ leading lines, and place a line containing
	`--` between contiguous groups of matches.

`-W`::
`--function-context`::
	Show the surrounding text from the previous line containing a
	function name up to the one before the next function name,
	effectively showing the whole function in which the match was
	found. The function names are determined in the same way as
	`git diff` works out patch hunk headers (see 'Defining a
	custom hunk-header' in linkgit:gitattributes[5]).

`-m <num>`::
`--max-count <num>`::
	Limit the amount of matches per file. When using the `-v` or
	`--invert-match` option, the search stops after the specified
	number of non-matches. A value of -1 will return unlimited
	results (the default). A value of 0 will exit immediately with
	a non-zero status.

`--threads <num>`::
	Number of `grep` worker threads to use.  See `NOTES ON THREADS`
	and `grep.threads` in 'CONFIGURATION' for more information.

`-f <file>`::
	Read patterns from _<file>_, one per line.
+
Passing the pattern via _<file>_ allows for providing a search pattern
containing a \0.
+
Not all pattern types support patterns containing \0. Git will error
out if a given pattern type can't support such a pattern. The
`--perl-regexp` pattern type when compiled against the PCRE v2 backend
has the widest support for these types of patterns.
+
In versions of Git before 2.23.0 patterns containing \0 would be
silently considered fixed. This was never documented, there were also
odd and undocumented interactions between e.g. non-ASCII patterns
containing \0 and `--ignore-case`.
+
In future versions we may learn to support patterns containing \0 for
more search backends, until then we'll die when the pattern type in
question doesn't support them.

`-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.
+
For more details about the _<pathspec>_ syntax, see the `pathspec` entry
in linkgit:gitglossary[7].

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.

`git grep solution -- :^Documentation`::
	Looks for `solution`, excluding files in `Documentation`.

NOTES ON THREADS
----------------

The `--threads` option (and the `grep.threads` configuration) will be ignored when
`--open-files-in-pager` is used, forcing a single-threaded execution.

When grepping the object store (with `--cached` or giving tree objects), running
with multiple threads might perform slower than single-threaded if `--textconv`
is given and there are too many text conversions.  Thus, if low performance is
experienced in this case, it might be desirable to use `--threads=1`.

CONFIGURATION
-------------

include::includes/cmd-config-section-all.adoc[]

include::config/grep.adoc[]

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