Documentation / git-rev-parse.txton commit Teach diff --submodule and status to handle .git files in submodules (eee49b6)
   1git-rev-parse(1)
   2================
   3
   4NAME
   5----
   6git-rev-parse - Pick out and massage parameters
   7
   8
   9SYNOPSIS
  10--------
  11'git rev-parse' [ --option ] <args>...
  12
  13DESCRIPTION
  14-----------
  15
  16Many git porcelainish commands take mixture of flags
  17(i.e. parameters that begin with a dash '-') and parameters
  18meant for the underlying 'git rev-list' command they use internally
  19and flags and parameters for the other commands they use
  20downstream of 'git rev-list'.  This command is used to
  21distinguish between them.
  22
  23
  24OPTIONS
  25-------
  26--parseopt::
  27        Use 'git rev-parse' in option parsing mode (see PARSEOPT section below).
  28
  29--keep-dashdash::
  30        Only meaningful in `--parseopt` mode. Tells the option parser to echo
  31        out the first `--` met instead of skipping it.
  32
  33--stop-at-non-option::
  34        Only meaningful in `--parseopt` mode.  Lets the option parser stop at
  35        the first non-option argument.  This can be used to parse sub-commands
  36        that take options themselves.
  37
  38--sq-quote::
  39        Use 'git rev-parse' in shell quoting mode (see SQ-QUOTE
  40        section below). In contrast to the `--sq` option below, this
  41        mode does only quoting. Nothing else is done to command input.
  42
  43--revs-only::
  44        Do not output flags and parameters not meant for
  45        'git rev-list' command.
  46
  47--no-revs::
  48        Do not output flags and parameters meant for
  49        'git rev-list' command.
  50
  51--flags::
  52        Do not output non-flag parameters.
  53
  54--no-flags::
  55        Do not output flag parameters.
  56
  57--default <arg>::
  58        If there is no parameter given by the user, use `<arg>`
  59        instead.
  60
  61--verify::
  62        The parameter given must be usable as a single, valid
  63        object name.  Otherwise barf and abort.
  64
  65-q::
  66--quiet::
  67        Only meaningful in `--verify` mode. Do not output an error
  68        message if the first argument is not a valid object name;
  69        instead exit with non-zero status silently.
  70
  71--sq::
  72        Usually the output is made one line per flag and
  73        parameter.  This option makes output a single line,
  74        properly quoted for consumption by shell.  Useful when
  75        you expect your parameter to contain whitespaces and
  76        newlines (e.g. when using pickaxe `-S` with
  77        'git diff-\*'). In contrast to the `--sq-quote` option,
  78        the command input is still interpreted as usual.
  79
  80--not::
  81        When showing object names, prefix them with '{caret}' and
  82        strip '{caret}' prefix from the object names that already have
  83        one.
  84
  85--symbolic::
  86        Usually the object names are output in SHA1 form (with
  87        possible '{caret}' prefix); this option makes them output in a
  88        form as close to the original input as possible.
  89
  90--symbolic-full-name::
  91        This is similar to \--symbolic, but it omits input that
  92        are not refs (i.e. branch or tag names; or more
  93        explicitly disambiguating "heads/master" form, when you
  94        want to name the "master" branch when there is an
  95        unfortunately named tag "master"), and show them as full
  96        refnames (e.g. "refs/heads/master").
  97
  98--abbrev-ref[={strict|loose}]::
  99        A non-ambiguous short name of the objects name.
 100        The option core.warnAmbiguousRefs is used to select the strict
 101        abbreviation mode.
 102
 103--all::
 104        Show all refs found in `$GIT_DIR/refs`.
 105
 106--branches[=pattern]::
 107--tags[=pattern]::
 108--remotes[=pattern]::
 109        Show all branches, tags, or remote-tracking branches,
 110        respectively (i.e., refs found in `$GIT_DIR/refs/heads`,
 111        `$GIT_DIR/refs/tags`, or `$GIT_DIR/refs/remotes`,
 112        respectively).
 113+
 114If a `pattern` is given, only refs matching the given shell glob are
 115shown.  If the pattern does not contain a globbing character (`?`,
 116`\*`, or `[`), it is turned into a prefix match by appending `/\*`.
 117
 118--glob=pattern::
 119        Show all refs matching the shell glob pattern `pattern`. If
 120        the pattern does not start with `refs/`, this is automatically
 121        prepended.  If the pattern does not contain a globbing
 122        character (`?`, `\*`, or `[`), it is turned into a prefix
 123        match by appending `/\*`.
 124
 125--show-toplevel::
 126        Show the absolute path of the top-level directory.
 127
 128--show-prefix::
 129        When the command is invoked from a subdirectory, show the
 130        path of the current directory relative to the top-level
 131        directory.
 132
 133--show-cdup::
 134        When the command is invoked from a subdirectory, show the
 135        path of the top-level directory relative to the current
 136        directory (typically a sequence of "../", or an empty string).
 137
 138--git-dir::
 139        Show `$GIT_DIR` if defined else show the path to the .git directory.
 140
 141--is-inside-git-dir::
 142        When the current working directory is below the repository
 143        directory print "true", otherwise "false".
 144
 145--is-inside-work-tree::
 146        When the current working directory is inside the work tree of the
 147        repository print "true", otherwise "false".
 148
 149--is-bare-repository::
 150        When the repository is bare print "true", otherwise "false".
 151
 152--local-env-vars::
 153        List the GIT_* environment variables that are local to the
 154        repository (e.g. GIT_DIR or GIT_WORK_TREE, but not GIT_EDITOR).
 155        Only the names of the variables are listed, not their value,
 156        even if they are set.
 157
 158--short::
 159--short=number::
 160        Instead of outputting the full SHA1 values of object names try to
 161        abbreviate them to a shorter unique name. When no length is specified
 162        7 is used. The minimum length is 4.
 163
 164--since=datestring::
 165--after=datestring::
 166        Parse the date string, and output the corresponding
 167        --max-age= parameter for 'git rev-list'.
 168
 169--until=datestring::
 170--before=datestring::
 171        Parse the date string, and output the corresponding
 172        --min-age= parameter for 'git rev-list'.
 173
 174<args>...::
 175        Flags and parameters to be parsed.
 176
 177
 178SPECIFYING REVISIONS
 179--------------------
 180
 181A revision parameter typically, but not necessarily, names a
 182commit object.  They use what is called an 'extended SHA1'
 183syntax.  Here are various ways to spell object names.  The
 184ones listed near the end of this list are to name trees and
 185blobs contained in a commit.
 186
 187* The full SHA1 object name (40-byte hexadecimal string), or
 188  a substring of such that is unique within the repository.
 189  E.g. dae86e1950b1277e545cee180551750029cfe735 and dae86e both
 190  name the same commit object if there are no other object in
 191  your repository whose object name starts with dae86e.
 192
 193* An output from 'git describe'; i.e. a closest tag, optionally
 194  followed by a dash and a number of commits, followed by a dash, a
 195  `g`, and an abbreviated object name.
 196
 197* A symbolic ref name.  E.g. 'master' typically means the commit
 198  object referenced by $GIT_DIR/refs/heads/master.  If you
 199  happen to have both heads/master and tags/master, you can
 200  explicitly say 'heads/master' to tell git which one you mean.
 201  When ambiguous, a `<name>` is disambiguated by taking the
 202  first match in the following rules:
 203
 204  . if `$GIT_DIR/<name>` exists, that is what you mean (this is usually
 205    useful only for `HEAD`, `FETCH_HEAD`, `ORIG_HEAD` and `MERGE_HEAD`);
 206
 207  . otherwise, `$GIT_DIR/refs/<name>` if exists;
 208
 209  . otherwise, `$GIT_DIR/refs/tags/<name>` if exists;
 210
 211  . otherwise, `$GIT_DIR/refs/heads/<name>` if exists;
 212
 213  . otherwise, `$GIT_DIR/refs/remotes/<name>` if exists;
 214
 215  . otherwise, `$GIT_DIR/refs/remotes/<name>/HEAD` if exists.
 216+
 217HEAD names the commit your changes in the working tree is based on.
 218FETCH_HEAD records the branch you fetched from a remote repository
 219with your last 'git fetch' invocation.
 220ORIG_HEAD is created by commands that moves your HEAD in a drastic
 221way, to record the position of the HEAD before their operation, so that
 222you can change the tip of the branch back to the state before you ran
 223them easily.
 224MERGE_HEAD records the commit(s) you are merging into your branch
 225when you run 'git merge'.
 226
 227* A ref followed by the suffix '@' with a date specification
 228  enclosed in a brace
 229  pair (e.g. '\{yesterday\}', '\{1 month 2 weeks 3 days 1 hour 1
 230  second ago\}' or '\{1979-02-26 18:30:00\}') to specify the value
 231  of the ref at a prior point in time.  This suffix may only be
 232  used immediately following a ref name and the ref must have an
 233  existing log ($GIT_DIR/logs/<ref>). Note that this looks up the state
 234  of your *local* ref at a given time; e.g., what was in your local
 235  `master` branch last week. If you want to look at commits made during
 236  certain times, see `--since` and `--until`.
 237
 238* A ref followed by the suffix '@' with an ordinal specification
 239  enclosed in a brace pair (e.g. '\{1\}', '\{15\}') to specify
 240  the n-th prior value of that ref.  For example 'master@\{1\}'
 241  is the immediate prior value of 'master' while 'master@\{5\}'
 242  is the 5th prior value of 'master'. This suffix may only be used
 243  immediately following a ref name and the ref must have an existing
 244  log ($GIT_DIR/logs/<ref>).
 245
 246* You can use the '@' construct with an empty ref part to get at a
 247  reflog of the current branch. For example, if you are on the
 248  branch 'blabla', then '@\{1\}' means the same as 'blabla@\{1\}'.
 249
 250* The special construct '@\{-<n>\}' means the <n>th branch checked out
 251  before the current one.
 252
 253* The suffix '@\{upstream\}' to a ref (short form 'ref@\{u\}') refers to
 254  the branch the ref is set to build on top of.  Missing ref defaults
 255  to the current branch.
 256
 257* A suffix '{caret}' to a revision parameter means the first parent of
 258  that commit object.  '{caret}<n>' means the <n>th parent (i.e.
 259  'rev{caret}'
 260  is equivalent to 'rev{caret}1').  As a special rule,
 261  'rev{caret}0' means the commit itself and is used when 'rev' is the
 262  object name of a tag object that refers to a commit object.
 263
 264* A suffix '{tilde}<n>' to a revision parameter means the commit
 265  object that is the <n>th generation grand-parent of the named
 266  commit object, following only the first parent.  I.e. rev~3 is
 267  equivalent to rev{caret}{caret}{caret} which is equivalent to
 268  rev{caret}1{caret}1{caret}1.  See below for a illustration of
 269  the usage of this form.
 270
 271* A suffix '{caret}' followed by an object type name enclosed in
 272  brace pair (e.g. `v0.99.8{caret}\{commit\}`) means the object
 273  could be a tag, and dereference the tag recursively until an
 274  object of that type is found or the object cannot be
 275  dereferenced anymore (in which case, barf).  `rev{caret}0`
 276  introduced earlier is a short-hand for `rev{caret}\{commit\}`.
 277
 278* A suffix '{caret}' followed by an empty brace pair
 279  (e.g. `v0.99.8{caret}\{\}`) means the object could be a tag,
 280  and dereference the tag recursively until a non-tag object is
 281  found.
 282
 283* A colon, followed by a slash, followed by a text: this names
 284  a commit whose commit message starts with the specified text.
 285  This name returns the youngest matching commit which is
 286  reachable from any ref.  If the commit message starts with a
 287  '!', you have to repeat that;  the special sequence ':/!',
 288  followed by something else than '!' is reserved for now.
 289
 290* A suffix ':' followed by a path; this names the blob or tree
 291  at the given path in the tree-ish object named by the part
 292  before the colon.
 293
 294* A colon, optionally followed by a stage number (0 to 3) and a
 295  colon, followed by a path; this names a blob object in the
 296  index at the given path.  Missing stage number (and the colon
 297  that follows it) names a stage 0 entry. During a merge, stage
 298  1 is the common ancestor, stage 2 is the target branch's version
 299  (typically the current branch), and stage 3 is the version from
 300  the branch being merged.
 301
 302Here is an illustration, by Jon Loeliger.  Both commit nodes B
 303and C are parents of commit node A.  Parent commits are ordered
 304left-to-right.
 305
 306........................................
 307G   H   I   J
 308 \ /     \ /
 309  D   E   F
 310   \  |  / \
 311    \ | /   |
 312     \|/    |
 313      B     C
 314       \   /
 315        \ /
 316         A
 317........................................
 318
 319    A =      = A^0
 320    B = A^   = A^1     = A~1
 321    C = A^2  = A^2
 322    D = A^^  = A^1^1   = A~2
 323    E = B^2  = A^^2
 324    F = B^3  = A^^3
 325    G = A^^^ = A^1^1^1 = A~3
 326    H = D^2  = B^^2    = A^^^2  = A~2^2
 327    I = F^   = B^3^    = A^^3^
 328    J = F^2  = B^3^2   = A^^3^2
 329
 330
 331SPECIFYING RANGES
 332-----------------
 333
 334History traversing commands such as 'git log' operate on a set
 335of commits, not just a single commit.  To these commands,
 336specifying a single revision with the notation described in the
 337previous section means the set of commits reachable from that
 338commit, following the commit ancestry chain.
 339
 340To exclude commits reachable from a commit, a prefix `{caret}`
 341notation is used.  E.g. `{caret}r1 r2` means commits reachable
 342from `r2` but exclude the ones reachable from `r1`.
 343
 344This set operation appears so often that there is a shorthand
 345for it.  When you have two commits `r1` and `r2` (named according
 346to the syntax explained in SPECIFYING REVISIONS above), you can ask
 347for commits that are reachable from r2 excluding those that are reachable
 348from r1 by `{caret}r1 r2` and it can be written as `r1..r2`.
 349
 350A similar notation `r1\...r2` is called symmetric difference
 351of `r1` and `r2` and is defined as
 352`r1 r2 --not $(git merge-base --all r1 r2)`.
 353It is the set of commits that are reachable from either one of
 354`r1` or `r2` but not from both.
 355
 356Two other shorthands for naming a set that is formed by a commit
 357and its parent commits exist.  The `r1{caret}@` notation means all
 358parents of `r1`.  `r1{caret}!` includes commit `r1` but excludes
 359all of its parents.
 360
 361Here are a handful of examples:
 362
 363   D                G H D
 364   D F              G H I J D F
 365   ^G D             H D
 366   ^D B             E I J F B
 367   B...C            G H D E B C
 368   ^D B C           E I J F B C
 369   C^@              I J F
 370   F^! D            G H D F
 371
 372PARSEOPT
 373--------
 374
 375In `--parseopt` mode, 'git rev-parse' helps massaging options to bring to shell
 376scripts the same facilities C builtins have. It works as an option normalizer
 377(e.g. splits single switches aggregate values), a bit like `getopt(1)` does.
 378
 379It takes on the standard input the specification of the options to parse and
 380understand, and echoes on the standard output a line suitable for `sh(1)` `eval`
 381to replace the arguments with normalized ones.  In case of error, it outputs
 382usage on the standard error stream, and exits with code 129.
 383
 384Input Format
 385~~~~~~~~~~~~
 386
 387'git rev-parse --parseopt' input format is fully text based. It has two parts,
 388separated by a line that contains only `--`. The lines before the separator
 389(should be more than one) are used for the usage.
 390The lines after the separator describe the options.
 391
 392Each line of options has this format:
 393
 394------------
 395<opt_spec><flags>* SP+ help LF
 396------------
 397
 398`<opt_spec>`::
 399        its format is the short option character, then the long option name
 400        separated by a comma. Both parts are not required, though at least one
 401        is necessary. `h,help`, `dry-run` and `f` are all three correct
 402        `<opt_spec>`.
 403
 404`<flags>`::
 405        `<flags>` are of `*`, `=`, `?` or `!`.
 406        * Use `=` if the option takes an argument.
 407
 408        * Use `?` to mean that the option is optional (though its use is discouraged).
 409
 410        * Use `*` to mean that this option should not be listed in the usage
 411          generated for the `-h` argument. It's shown for `--help-all` as
 412          documented in linkgit:gitcli[7].
 413
 414        * Use `!` to not make the corresponding negated long option available.
 415
 416The remainder of the line, after stripping the spaces, is used
 417as the help associated to the option.
 418
 419Blank lines are ignored, and lines that don't match this specification are used
 420as option group headers (start the line with a space to create such
 421lines on purpose).
 422
 423Example
 424~~~~~~~
 425
 426------------
 427OPTS_SPEC="\
 428some-command [options] <args>...
 429
 430some-command does foo and bar!
 431--
 432h,help    show the help
 433
 434foo       some nifty option --foo
 435bar=      some cool option --bar with an argument
 436
 437  An option group Header
 438C?        option C with an optional argument"
 439
 440eval `echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?`
 441------------
 442
 443SQ-QUOTE
 444--------
 445
 446In `--sq-quote` mode, 'git rev-parse' echoes on the standard output a
 447single line suitable for `sh(1)` `eval`. This line is made by
 448normalizing the arguments following `--sq-quote`. Nothing other than
 449quoting the arguments is done.
 450
 451If you want command input to still be interpreted as usual by
 452'git rev-parse' before the output is shell quoted, see the `--sq`
 453option.
 454
 455Example
 456~~~~~~~
 457
 458------------
 459$ cat >your-git-script.sh <<\EOF
 460#!/bin/sh
 461args=$(git rev-parse --sq-quote "$@")   # quote user-supplied arguments
 462command="git frotz -n24 $args"          # and use it inside a handcrafted
 463                                        # command line
 464eval "$command"
 465EOF
 466
 467$ sh your-git-script.sh "a b'c"
 468------------
 469
 470EXAMPLES
 471--------
 472
 473* Print the object name of the current commit:
 474+
 475------------
 476$ git rev-parse --verify HEAD
 477------------
 478
 479* Print the commit object name from the revision in the $REV shell variable:
 480+
 481------------
 482$ git rev-parse --verify $REV
 483------------
 484+
 485This will error out if $REV is empty or not a valid revision.
 486
 487* Same as above:
 488+
 489------------
 490$ git rev-parse --default master --verify $REV
 491------------
 492+
 493but if $REV is empty, the commit object name from master will be printed.
 494
 495
 496Author
 497------
 498Written by Linus Torvalds <torvalds@osdl.org> .
 499Junio C Hamano <gitster@pobox.com> and Pierre Habouzit <madcoder@debian.org>
 500
 501Documentation
 502--------------
 503Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 504
 505GIT
 506---
 507Part of the linkgit:git[1] suite