Documentation / git-rev-parse.txton commit Merge branch 'jk/fast-export-object-lookup' (4e38e9b)
   1git-rev-parse(1)
   2================
   3
   4NAME
   5----
   6git-rev-parse - Pick out and massage parameters
   7
   8
   9SYNOPSIS
  10--------
  11[verse]
  12'git rev-parse' [ --option ] <args>...
  13
  14DESCRIPTION
  15-----------
  16
  17Many Git porcelainish commands take mixture of flags
  18(i.e. parameters that begin with a dash '-') and parameters
  19meant for the underlying 'git rev-list' command they use internally
  20and flags and parameters for the other commands they use
  21downstream of 'git rev-list'.  This command is used to
  22distinguish between them.
  23
  24
  25OPTIONS
  26-------
  27--parseopt::
  28        Use 'git rev-parse' in option parsing mode (see PARSEOPT section below).
  29
  30--keep-dashdash::
  31        Only meaningful in `--parseopt` mode. Tells the option parser to echo
  32        out the first `--` met instead of skipping it.
  33
  34--stop-at-non-option::
  35        Only meaningful in `--parseopt` mode.  Lets the option parser stop at
  36        the first non-option argument.  This can be used to parse sub-commands
  37        that take options themselves.
  38
  39--sq-quote::
  40        Use 'git rev-parse' in shell quoting mode (see SQ-QUOTE
  41        section below). In contrast to the `--sq` option below, this
  42        mode does only quoting. Nothing else is done to command input.
  43
  44--revs-only::
  45        Do not output flags and parameters not meant for
  46        'git rev-list' command.
  47
  48--no-revs::
  49        Do not output flags and parameters meant for
  50        'git rev-list' command.
  51
  52--flags::
  53        Do not output non-flag parameters.
  54
  55--no-flags::
  56        Do not output flag parameters.
  57
  58--default <arg>::
  59        If there is no parameter given by the user, use `<arg>`
  60        instead.
  61
  62--verify::
  63        The parameter given must be usable as a single, valid
  64        object name.  Otherwise barf and abort.
  65
  66-q::
  67--quiet::
  68        Only meaningful in `--verify` mode. Do not output an error
  69        message if the first argument is not a valid object name;
  70        instead exit with non-zero status silently.
  71
  72--sq::
  73        Usually the output is made one line per flag and
  74        parameter.  This option makes output a single line,
  75        properly quoted for consumption by shell.  Useful when
  76        you expect your parameter to contain whitespaces and
  77        newlines (e.g. when using pickaxe `-S` with
  78        'git diff-{asterisk}'). In contrast to the `--sq-quote` option,
  79        the command input is still interpreted as usual.
  80
  81--not::
  82        When showing object names, prefix them with '{caret}' and
  83        strip '{caret}' prefix from the object names that already have
  84        one.
  85
  86--symbolic::
  87        Usually the object names are output in SHA1 form (with
  88        possible '{caret}' prefix); this option makes them output in a
  89        form as close to the original input as possible.
  90
  91--symbolic-full-name::
  92        This is similar to \--symbolic, but it omits input that
  93        are not refs (i.e. branch or tag names; or more
  94        explicitly disambiguating "heads/master" form, when you
  95        want to name the "master" branch when there is an
  96        unfortunately named tag "master"), and show them as full
  97        refnames (e.g. "refs/heads/master").
  98
  99--abbrev-ref[=(strict|loose)]::
 100        A non-ambiguous short name of the objects name.
 101        The option core.warnAmbiguousRefs is used to select the strict
 102        abbreviation mode.
 103
 104--disambiguate=<prefix>::
 105        Show every object whose name begins with the given prefix.
 106        The <prefix> must be at least 4 hexadecimal digits long to
 107        avoid listing each and every object in the repository by
 108        mistake.
 109
 110--all::
 111        Show all refs found in `refs/`.
 112
 113--branches[=pattern]::
 114--tags[=pattern]::
 115--remotes[=pattern]::
 116        Show all branches, tags, or remote-tracking branches,
 117        respectively (i.e., refs found in `refs/heads`,
 118        `refs/tags`, or `refs/remotes`, respectively).
 119+
 120If a `pattern` is given, only refs matching the given shell glob are
 121shown.  If the pattern does not contain a globbing character (`?`,
 122`*`, or `[`), it is turned into a prefix match by appending `/*`.
 123
 124--glob=pattern::
 125        Show all refs matching the shell glob pattern `pattern`. If
 126        the pattern does not start with `refs/`, this is automatically
 127        prepended.  If the pattern does not contain a globbing
 128        character (`?`, `*`, or `[`), it is turned into a prefix
 129        match by appending `/*`.
 130
 131--show-toplevel::
 132        Show the absolute path of the top-level directory.
 133
 134--show-prefix::
 135        When the command is invoked from a subdirectory, show the
 136        path of the current directory relative to the top-level
 137        directory.
 138
 139--show-cdup::
 140        When the command is invoked from a subdirectory, show the
 141        path of the top-level directory relative to the current
 142        directory (typically a sequence of "../", or an empty string).
 143
 144--git-dir::
 145        Show `$GIT_DIR` if defined. Otherwise show the path to
 146        the .git directory. The path shown, when relative, is
 147        relative to the current working directory.
 148+
 149If `$GIT_DIR` is not defined and the current directory
 150is not detected to lie in a Git repository or work tree
 151print a message to stderr and exit with nonzero status.
 152
 153--is-inside-git-dir::
 154        When the current working directory is below the repository
 155        directory print "true", otherwise "false".
 156
 157--is-inside-work-tree::
 158        When the current working directory is inside the work tree of the
 159        repository print "true", otherwise "false".
 160
 161--is-bare-repository::
 162        When the repository is bare print "true", otherwise "false".
 163
 164--local-env-vars::
 165        List the GIT_* environment variables that are local to the
 166        repository (e.g. GIT_DIR or GIT_WORK_TREE, but not GIT_EDITOR).
 167        Only the names of the variables are listed, not their value,
 168        even if they are set.
 169
 170--short::
 171--short=number::
 172        Instead of outputting the full SHA1 values of object names try to
 173        abbreviate them to a shorter unique name. When no length is specified
 174        7 is used. The minimum length is 4.
 175
 176--since=datestring::
 177--after=datestring::
 178        Parse the date string, and output the corresponding
 179        --max-age= parameter for 'git rev-list'.
 180
 181--until=datestring::
 182--before=datestring::
 183        Parse the date string, and output the corresponding
 184        --min-age= parameter for 'git rev-list'.
 185
 186<args>...::
 187        Flags and parameters to be parsed.
 188
 189--resolve-git-dir <path>::
 190        Check if <path> is a valid repository or a gitfile that
 191        points at a valid repository, and print the location of the
 192        repository.  If <path> is a gitfile then the resolved path
 193        to the real repository is printed.
 194
 195
 196include::revisions.txt[]
 197
 198PARSEOPT
 199--------
 200
 201In `--parseopt` mode, 'git rev-parse' helps massaging options to bring to shell
 202scripts the same facilities C builtins have. It works as an option normalizer
 203(e.g. splits single switches aggregate values), a bit like `getopt(1)` does.
 204
 205It takes on the standard input the specification of the options to parse and
 206understand, and echoes on the standard output a string suitable for `sh(1)` `eval`
 207to replace the arguments with normalized ones.  In case of error, it outputs
 208usage on the standard error stream, and exits with code 129.
 209
 210Note: Make sure you quote the result when passing it to `eval`.  See
 211below for an example.
 212
 213Input Format
 214~~~~~~~~~~~~
 215
 216'git rev-parse --parseopt' input format is fully text based. It has two parts,
 217separated by a line that contains only `--`. The lines before the separator
 218(should be more than one) are used for the usage.
 219The lines after the separator describe the options.
 220
 221Each line of options has this format:
 222
 223------------
 224<opt_spec><flags>* SP+ help LF
 225------------
 226
 227`<opt_spec>`::
 228        its format is the short option character, then the long option name
 229        separated by a comma. Both parts are not required, though at least one
 230        is necessary. `h,help`, `dry-run` and `f` are all three correct
 231        `<opt_spec>`.
 232
 233`<flags>`::
 234        `<flags>` are of `*`, `=`, `?` or `!`.
 235        * Use `=` if the option takes an argument.
 236
 237        * Use `?` to mean that the option is optional (though its use is discouraged).
 238
 239        * Use `*` to mean that this option should not be listed in the usage
 240          generated for the `-h` argument. It's shown for `--help-all` as
 241          documented in linkgit:gitcli[7].
 242
 243        * Use `!` to not make the corresponding negated long option available.
 244
 245The remainder of the line, after stripping the spaces, is used
 246as the help associated to the option.
 247
 248Blank lines are ignored, and lines that don't match this specification are used
 249as option group headers (start the line with a space to create such
 250lines on purpose).
 251
 252Example
 253~~~~~~~
 254
 255------------
 256OPTS_SPEC="\
 257some-command [options] <args>...
 258
 259some-command does foo and bar!
 260--
 261h,help    show the help
 262
 263foo       some nifty option --foo
 264bar=      some cool option --bar with an argument
 265
 266  An option group Header
 267C?        option C with an optional argument"
 268
 269eval "$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)"
 270------------
 271
 272SQ-QUOTE
 273--------
 274
 275In `--sq-quote` mode, 'git rev-parse' echoes on the standard output a
 276single line suitable for `sh(1)` `eval`. This line is made by
 277normalizing the arguments following `--sq-quote`. Nothing other than
 278quoting the arguments is done.
 279
 280If you want command input to still be interpreted as usual by
 281'git rev-parse' before the output is shell quoted, see the `--sq`
 282option.
 283
 284Example
 285~~~~~~~
 286
 287------------
 288$ cat >your-git-script.sh <<\EOF
 289#!/bin/sh
 290args=$(git rev-parse --sq-quote "$@")   # quote user-supplied arguments
 291command="git frotz -n24 $args"          # and use it inside a handcrafted
 292                                        # command line
 293eval "$command"
 294EOF
 295
 296$ sh your-git-script.sh "a b'c"
 297------------
 298
 299EXAMPLES
 300--------
 301
 302* Print the object name of the current commit:
 303+
 304------------
 305$ git rev-parse --verify HEAD
 306------------
 307
 308* Print the commit object name from the revision in the $REV shell variable:
 309+
 310------------
 311$ git rev-parse --verify $REV
 312------------
 313+
 314This will error out if $REV is empty or not a valid revision.
 315
 316* Same as above:
 317+
 318------------
 319$ git rev-parse --default master --verify $REV
 320------------
 321+
 322but if $REV is empty, the commit object name from master will be printed.
 323
 324GIT
 325---
 326Part of the linkgit:git[1] suite