Documentation / git-grep.txton commit Merge branch 'sg/object-as-type-commit-graph-fix' (2ed3de4)
   1git-grep(1)
   2===========
   3
   4NAME
   5----
   6git-grep - Print lines matching a pattern
   7
   8
   9SYNOPSIS
  10--------
  11[verse]
  12'git grep' [-a | --text] [-I] [--textconv] [-i | --ignore-case] [-w | --word-regexp]
  13           [-v | --invert-match] [-h|-H] [--full-name]
  14           [-E | --extended-regexp] [-G | --basic-regexp]
  15           [-P | --perl-regexp]
  16           [-F | --fixed-strings] [-n | --line-number] [--column]
  17           [-l | --files-with-matches] [-L | --files-without-match]
  18           [(-O | --open-files-in-pager) [<pager>]]
  19           [-z | --null]
  20           [ -o | --only-matching ] [-c | --count] [--all-match] [-q | --quiet]
  21           [--max-depth <depth>] [--[no-]recursive]
  22           [--color[=<when>] | --no-color]
  23           [--break] [--heading] [-p | --show-function]
  24           [-A <post-context>] [-B <pre-context>] [-C <context>]
  25           [-W | --function-context]
  26           [--threads <num>]
  27           [-f <file>] [-e] <pattern>
  28           [--and|--or|--not|(|)|-e <pattern>...]
  29           [--recurse-submodules] [--parent-basename <basename>]
  30           [ [--[no-]exclude-standard] [--cached | --no-index | --untracked] | <tree>...]
  31           [--] [<pathspec>...]
  32
  33DESCRIPTION
  34-----------
  35Look for specified patterns in the tracked files in the work tree, blobs
  36registered in the index file, or blobs in given tree objects.  Patterns
  37are lists of one or more search expressions separated by newline
  38characters.  An empty string as search expression matches all lines.
  39
  40
  41CONFIGURATION
  42-------------
  43
  44grep.lineNumber::
  45        If set to true, enable `-n` option by default.
  46
  47grep.column::
  48        If set to true, enable the `--column` option by default.
  49
  50grep.patternType::
  51        Set the default matching behavior. Using a value of 'basic', 'extended',
  52        'fixed', or 'perl' will enable the `--basic-regexp`, `--extended-regexp`,
  53        `--fixed-strings`, or `--perl-regexp` option accordingly, while the
  54        value 'default' will return to the default matching behavior.
  55
  56grep.extendedRegexp::
  57        If set to true, enable `--extended-regexp` option by default. This
  58        option is ignored when the `grep.patternType` option is set to a value
  59        other than 'default'.
  60
  61grep.threads::
  62        Number of grep worker threads to use.  If unset (or set to 0),
  63        8 threads are used by default (for now).
  64
  65grep.fullName::
  66        If set to true, enable `--full-name` option by default.
  67
  68grep.fallbackToNoIndex::
  69        If set to true, fall back to git grep --no-index if git grep
  70        is executed outside of a git repository.  Defaults to false.
  71
  72
  73OPTIONS
  74-------
  75--cached::
  76        Instead of searching tracked files in the working tree, search
  77        blobs registered in the index file.
  78
  79--no-index::
  80        Search files in the current directory that is not managed by Git.
  81
  82--untracked::
  83        In addition to searching in the tracked files in the working
  84        tree, search also in untracked files.
  85
  86--no-exclude-standard::
  87        Also search in ignored files by not honoring the `.gitignore`
  88        mechanism. Only useful with `--untracked`.
  89
  90--exclude-standard::
  91        Do not pay attention to ignored files specified via the `.gitignore`
  92        mechanism.  Only useful when searching files in the current directory
  93        with `--no-index`.
  94
  95--recurse-submodules::
  96        Recursively search in each submodule that has been initialized and
  97        checked out in the repository.  When used in combination with the
  98        <tree> option the prefix of all submodule output will be the name of
  99        the parent project's <tree> object.
 100
 101-a::
 102--text::
 103        Process binary files as if they were text.
 104
 105--textconv::
 106        Honor textconv filter settings.
 107
 108--no-textconv::
 109        Do not honor textconv filter settings.
 110        This is the default.
 111
 112-i::
 113--ignore-case::
 114        Ignore case differences between the patterns and the
 115        files.
 116
 117-I::
 118        Don't match the pattern in binary files.
 119
 120--max-depth <depth>::
 121        For each <pathspec> given on command line, descend at most <depth>
 122        levels of directories. A value of -1 means no limit.
 123        This option is ignored if <pathspec> contains active wildcards.
 124        In other words if "a*" matches a directory named "a*",
 125        "*" is matched literally so --max-depth is still effective.
 126
 127-r::
 128--recursive::
 129        Same as `--max-depth=-1`; this is the default.
 130
 131--no-recursive::
 132        Same as `--max-depth=0`.
 133
 134-w::
 135--word-regexp::
 136        Match the pattern only at word boundary (either begin at the
 137        beginning of a line, or preceded by a non-word character; end at
 138        the end of a line or followed by a non-word character).
 139
 140-v::
 141--invert-match::
 142        Select non-matching lines.
 143
 144-h::
 145-H::
 146        By default, the command shows the filename for each
 147        match.  `-h` option is used to suppress this output.
 148        `-H` is there for completeness and does not do anything
 149        except it overrides `-h` given earlier on the command
 150        line.
 151
 152--full-name::
 153        When run from a subdirectory, the command usually
 154        outputs paths relative to the current directory.  This
 155        option forces paths to be output relative to the project
 156        top directory.
 157
 158-E::
 159--extended-regexp::
 160-G::
 161--basic-regexp::
 162        Use POSIX extended/basic regexp for patterns.  Default
 163        is to use basic regexp.
 164
 165-P::
 166--perl-regexp::
 167        Use Perl-compatible regular expressions for patterns.
 168+
 169Support for these types of regular expressions is an optional
 170compile-time dependency. If Git wasn't compiled with support for them
 171providing this option will cause it to die.
 172
 173-F::
 174--fixed-strings::
 175        Use fixed strings for patterns (don't interpret pattern
 176        as a regex).
 177
 178-n::
 179--line-number::
 180        Prefix the line number to matching lines.
 181
 182--column::
 183        Prefix the 1-indexed byte-offset of the first match from the start of the
 184        matching line.
 185
 186-l::
 187--files-with-matches::
 188--name-only::
 189-L::
 190--files-without-match::
 191        Instead of showing every matched line, show only the
 192        names of files that contain (or do not contain) matches.
 193        For better compatibility with 'git diff', `--name-only` is a
 194        synonym for `--files-with-matches`.
 195
 196-O[<pager>]::
 197--open-files-in-pager[=<pager>]::
 198        Open the matching files in the pager (not the output of 'grep').
 199        If the pager happens to be "less" or "vi", and the user
 200        specified only one pattern, the first file is positioned at
 201        the first match automatically. The `pager` argument is
 202        optional; if specified, it must be stuck to the option
 203        without a space. If `pager` is unspecified, the default pager
 204        will be used (see `core.pager` in linkgit:git-config[1]).
 205
 206-z::
 207--null::
 208        Output \0 instead of the character that normally follows a
 209        file name.
 210
 211-o::
 212--only-matching::
 213        Print only the matched (non-empty) parts of a matching line, with each such
 214        part on a separate output line.
 215
 216-c::
 217--count::
 218        Instead of showing every matched line, show the number of
 219        lines that match.
 220
 221--color[=<when>]::
 222        Show colored matches.
 223        The value must be always (the default), never, or auto.
 224
 225--no-color::
 226        Turn off match highlighting, even when the configuration file
 227        gives the default to color output.
 228        Same as `--color=never`.
 229
 230--break::
 231        Print an empty line between matches from different files.
 232
 233--heading::
 234        Show the filename above the matches in that file instead of
 235        at the start of each shown line.
 236
 237-p::
 238--show-function::
 239        Show the preceding line that contains the function name of
 240        the match, unless the matching line is a function name itself.
 241        The name is determined in the same way as 'git diff' works out
 242        patch hunk headers (see 'Defining a custom hunk-header' in
 243        linkgit:gitattributes[5]).
 244
 245-<num>::
 246-C <num>::
 247--context <num>::
 248        Show <num> leading and trailing lines, and place a line
 249        containing `--` between contiguous groups of matches.
 250
 251-A <num>::
 252--after-context <num>::
 253        Show <num> trailing lines, and place a line containing
 254        `--` between contiguous groups of matches.
 255
 256-B <num>::
 257--before-context <num>::
 258        Show <num> leading lines, and place a line containing
 259        `--` between contiguous groups of matches.
 260
 261-W::
 262--function-context::
 263        Show the surrounding text from the previous line containing a
 264        function name up to the one before the next function name,
 265        effectively showing the whole function in which the match was
 266        found.
 267
 268--threads <num>::
 269        Number of grep worker threads to use.
 270        See `grep.threads` in 'CONFIGURATION' for more information.
 271
 272-f <file>::
 273        Read patterns from <file>, one per line.
 274
 275-e::
 276        The next parameter is the pattern. This option has to be
 277        used for patterns starting with `-` and should be used in
 278        scripts passing user input to grep.  Multiple patterns are
 279        combined by 'or'.
 280
 281--and::
 282--or::
 283--not::
 284( ... )::
 285        Specify how multiple patterns are combined using Boolean
 286        expressions.  `--or` is the default operator.  `--and` has
 287        higher precedence than `--or`.  `-e` has to be used for all
 288        patterns.
 289
 290--all-match::
 291        When giving multiple pattern expressions combined with `--or`,
 292        this flag is specified to limit the match to files that
 293        have lines to match all of them.
 294
 295-q::
 296--quiet::
 297        Do not output matched lines; instead, exit with status 0 when
 298        there is a match and with non-zero status when there isn't.
 299
 300<tree>...::
 301        Instead of searching tracked files in the working tree, search
 302        blobs in the given trees.
 303
 304\--::
 305        Signals the end of options; the rest of the parameters
 306        are <pathspec> limiters.
 307
 308<pathspec>...::
 309        If given, limit the search to paths matching at least one pattern.
 310        Both leading paths match and glob(7) patterns are supported.
 311+
 312For more details about the <pathspec> syntax, see the 'pathspec' entry
 313in linkgit:gitglossary[7].
 314
 315EXAMPLES
 316--------
 317
 318`git grep 'time_t' -- '*.[ch]'`::
 319        Looks for `time_t` in all tracked .c and .h files in the working
 320        directory and its subdirectories.
 321
 322`git grep -e '#define' --and \( -e MAX_PATH -e PATH_MAX \)`::
 323        Looks for a line that has `#define` and either `MAX_PATH` or
 324        `PATH_MAX`.
 325
 326`git grep --all-match -e NODE -e Unexpected`::
 327        Looks for a line that has `NODE` or `Unexpected` in
 328        files that have lines that match both.
 329
 330`git grep solution -- :^Documentation`::
 331        Looks for `solution`, excluding files in `Documentation`.
 332
 333GIT
 334---
 335Part of the linkgit:git[1] suite