Merge branch 'cc/cherry-pick-series'
[git.git] / Documentation / git-grep.txt
blob4b32322a67d9f3de8b555d3d9d03e7ddab14e0a7
1 git-grep(1)
2 ===========
4 NAME
5 ----
6 git-grep - Print lines matching a pattern
9 SYNOPSIS
10 --------
11 [verse]
12 'git grep' [-a | --text] [-I] [-i | --ignore-case] [-w | --word-regexp]
13            [-v | --invert-match] [-h|-H] [--full-name]
14            [-E | --extended-regexp] [-G | --basic-regexp]
15            [-F | --fixed-strings] [-n]
16            [-l | --files-with-matches] [-L | --files-without-match]
17            [-z | --null]
18            [-c | --count] [--all-match] [-q | --quiet]
19            [--max-depth <depth>]
20            [--color[=<when>] | --no-color]
21            [-A <post-context>] [-B <pre-context>] [-C <context>]
22            [-f <file>] [-e] <pattern>
23            [--and|--or|--not|(|)|-e <pattern>...]
24            [--cached | --no-index | <tree>...]
25            [--] [<pathspec>...]
27 DESCRIPTION
28 -----------
29 Look for specified patterns in the tracked files in the work tree, blobs
30 registered in the index file, or blobs in given tree objects.
33 OPTIONS
34 -------
35 --cached::
36         Instead of searching tracked files in the working tree, search
37         blobs registered in the index file.
39 --no-index::
40         Search files in the current directory, not just those tracked by git.
42 -a::
43 --text::
44         Process binary files as if they were text.
46 -i::
47 --ignore-case::
48         Ignore case differences between the patterns and the
49         files.
51 -I::
52         Don't match the pattern in binary files.
54 --max-depth <depth>::
55         For each <pathspec> given on command line, descend at most <depth>
56         levels of directories. A negative value means no limit.
58 -w::
59 --word-regexp::
60         Match the pattern only at word boundary (either begin at the
61         beginning of a line, or preceded by a non-word character; end at
62         the end of a line or followed by a non-word character).
64 -v::
65 --invert-match::
66         Select non-matching lines.
68 -h::
69 -H::
70         By default, the command shows the filename for each
71         match.  `-h` option is used to suppress this output.
72         `-H` is there for completeness and does not do anything
73         except it overrides `-h` given earlier on the command
74         line.
76 --full-name::
77         When run from a subdirectory, the command usually
78         outputs paths relative to the current directory.  This
79         option forces paths to be output relative to the project
80         top directory.
82 -E::
83 --extended-regexp::
84 -G::
85 --basic-regexp::
86         Use POSIX extended/basic regexp for patterns.  Default
87         is to use basic regexp.
89 -F::
90 --fixed-strings::
91         Use fixed strings for patterns (don't interpret pattern
92         as a regex).
94 -n::
95         Prefix the line number to matching lines.
97 -l::
98 --files-with-matches::
99 --name-only::
100 -L::
101 --files-without-match::
102         Instead of showing every matched line, show only the
103         names of files that contain (or do not contain) matches.
104         For better compatibility with 'git diff', `--name-only` is a
105         synonym for `--files-with-matches`.
107 -z::
108 --null::
109         Output \0 instead of the character that normally follows a
110         file name.
112 -c::
113 --count::
114         Instead of showing every matched line, show the number of
115         lines that match.
117 --color[=<when>]::
118         Show colored matches.
119         The value must be always (the default), never, or auto.
121 --no-color::
122         Turn off match highlighting, even when the configuration file
123         gives the default to color output.
124         Same as `--color=never`.
126 -[ABC] <context>::
127         Show `context` trailing (`A` -- after), or leading (`B`
128         -- before), or both (`C` -- context) lines, and place a
129         line containing `--` between contiguous groups of
130         matches.
132 -<num>::
133         A shortcut for specifying `-C<num>`.
135 -p::
136 --show-function::
137         Show the preceding line that contains the function name of
138         the match, unless the matching line is a function name itself.
139         The name is determined in the same way as 'git diff' works out
140         patch hunk headers (see 'Defining a custom hunk-header' in
141         linkgit:gitattributes[5]).
143 -f <file>::
144         Read patterns from <file>, one per line.
146 -e::
147         The next parameter is the pattern. This option has to be
148         used for patterns starting with `-` and should be used in
149         scripts passing user input to grep.  Multiple patterns are
150         combined by 'or'.
152 --and::
153 --or::
154 --not::
155 ( ... )::
156         Specify how multiple patterns are combined using Boolean
157         expressions.  `--or` is the default operator.  `--and` has
158         higher precedence than `--or`.  `-e` has to be used for all
159         patterns.
161 --all-match::
162         When giving multiple pattern expressions combined with `--or`,
163         this flag is specified to limit the match to files that
164         have lines to match all of them.
166 -q::
167 --quiet::
168         Do not output matched lines; instead, exit with status 0 when
169         there is a match and with non-zero status when there isn't.
171 <tree>...::
172         Instead of searching tracked files in the working tree, search
173         blobs in the given trees.
175 \--::
176         Signals the end of options; the rest of the parameters
177         are <pathspec> limiters.
179 <pathspec>...::
180         If given, limit the search to paths matching at least one pattern.
181         Both leading paths match and glob(7) patterns are supported.
183 Examples
184 --------
186 git grep 'time_t' -- '*.[ch]'::
187         Looks for `time_t` in all tracked .c and .h files in the working
188         directory and its subdirectories.
190 git grep -e \'#define\' --and \( -e MAX_PATH -e PATH_MAX \)::
191         Looks for a line that has `#define` and either `MAX_PATH` or
192         `PATH_MAX`.
194 git grep --all-match -e NODE -e Unexpected::
195         Looks for a line that has `NODE` or `Unexpected` in
196         files that have lines that match both.
198 Author
199 ------
200 Originally written by Linus Torvalds <torvalds@osdl.org>, later
201 revamped by Junio C Hamano.
204 Documentation
205 --------------
206 Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
210 Part of the linkgit:git[1] suite