c817d1614af01a11d60e50ab73f41ed2575f3d4a
   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 underlying `git-rev-list` command they use internally
  19and flags and parameters for other commands they use as the
  20downstream of `git-rev-list`.  This command is used to
  21distinguish between them.
  22
  23
  24OPTIONS
  25-------
  26--revs-only::
  27        Do not output flags and parameters not meant for
  28        `git-rev-list` command.
  29
  30--no-revs::
  31        Do not output flags and parameters meant for
  32        `git-rev-list` command.
  33
  34--flags::
  35        Do not output non-flag parameters.
  36
  37--no-flags::
  38        Do not output flag parameters.
  39
  40--default <arg>::
  41        If there is no parameter given by the user, use `<arg>`
  42        instead.
  43
  44--verify::
  45        The parameter given must be usable as a single, valid
  46        object name.  Otherwise barf and abort.
  47
  48--sq::
  49        Usually the output is made one line per flag and
  50        parameter.  This option makes output a single line,
  51        properly quoted for consumption by shell.  Useful when
  52        you expect your parameter to contain whitespaces and
  53        newlines (e.g. when using pickaxe `-S` with
  54        `git-diff-\*`).
  55
  56--not::
  57        When showing object names, prefix them with '{caret}' and
  58        strip '{caret}' prefix from the object names that already have
  59        one.
  60
  61--symbolic::
  62        Usually the object names are output in SHA1 form (with
  63        possible '{caret}' prefix); this option makes them output in a
  64        form as close to the original input as possible.
  65
  66
  67--all::
  68        Show all refs found in `$GIT_DIR/refs`.
  69
  70--branches::
  71        Show branch refs found in `$GIT_DIR/refs/heads`.
  72
  73--tags::
  74        Show tag refs found in `$GIT_DIR/refs/tags`.
  75
  76--remotes::
  77        Show tag refs found in `$GIT_DIR/refs/remotes`.
  78
  79--show-prefix::
  80        When the command is invoked from a subdirectory, show the
  81        path of the current directory relative to the top-level
  82        directory.
  83
  84--show-cdup::
  85        When the command is invoked from a subdirectory, show the
  86        path of the top-level directory relative to the current
  87        directory (typically a sequence of "../", or an empty string).
  88
  89--git-dir::
  90        Show `$GIT_DIR` if defined else show the path to the .git directory.
  91
  92--is-inside-git-dir::
  93        When the current working directory is below the repository
  94        directory print "true", otherwise "false".
  95
  96--is-bare-repository::
  97        When the repository is bare print "true", otherwise "false".
  98
  99--short, --short=number::
 100        Instead of outputting the full SHA1 values of object names try to
 101        abbreviate them to a shorter unique name. When no length is specified
 102        7 is used. The minimum length is 4.
 103
 104--since=datestring, --after=datestring::
 105        Parses the date string, and outputs corresponding
 106        --max-age= parameter for git-rev-list command.
 107
 108--until=datestring, --before=datestring::
 109        Parses the date string, and outputs corresponding
 110        --min-age= parameter for git-rev-list command.
 111
 112<args>...::
 113        Flags and parameters to be parsed.
 114
 115
 116SPECIFYING REVISIONS
 117--------------------
 118
 119A revision parameter typically, but not necessarily, names a
 120commit object.  They use what is called an 'extended SHA1'
 121syntax.  Here are various ways to spell object names.  The
 122ones listed near the end of this list are to name trees and
 123blobs contained in a commit.
 124
 125* The full SHA1 object name (40-byte hexadecimal string), or
 126  a substring of such that is unique within the repository.
 127  E.g. dae86e1950b1277e545cee180551750029cfe735 and dae86e both
 128  name the same commit object if there are no other object in
 129  your repository whose object name starts with dae86e.
 130
 131* An output from `git-describe`; i.e. a closest tag, followed by a
 132  dash, a `g`, and an abbreviated object name.
 133
 134* A symbolic ref name.  E.g. 'master' typically means the commit
 135  object referenced by $GIT_DIR/refs/heads/master.  If you
 136  happen to have both heads/master and tags/master, you can
 137  explicitly say 'heads/master' to tell git which one you mean.
 138  When ambiguous, a `<name>` is disambiguated by taking the
 139  first match in the following rules:
 140
 141  . if `$GIT_DIR/<name>` exists, that is what you mean (this is usually
 142    useful only for `HEAD`, `FETCH_HEAD` and `MERGE_HEAD`);
 143
 144  . otherwise, `$GIT_DIR/refs/<name>` if exists;
 145
 146  . otherwise, `$GIT_DIR/refs/tags/<name>` if exists;
 147
 148  . otherwise, `$GIT_DIR/refs/heads/<name>` if exists;
 149
 150  . otherwise, `$GIT_DIR/refs/remotes/<name>` if exists;
 151
 152  . otherwise, `$GIT_DIR/refs/remotes/<name>/HEAD` if exists.
 153
 154* A ref followed by the suffix '@' with a date specification
 155  enclosed in a brace
 156  pair (e.g. '\{yesterday\}', '\{1 month 2 weeks 3 days 1 hour 1
 157  second ago\}' or '\{1979-02-26 18:30:00\}') to specify the value
 158  of the ref at a prior point in time.  This suffix may only be
 159  used immediately following a ref name and the ref must have an
 160  existing log ($GIT_DIR/logs/<ref>).
 161
 162* A ref followed by the suffix '@' with an ordinal specification
 163  enclosed in a brace pair (e.g. '\{1\}', '\{15\}') to specify
 164  the n-th prior value of that ref.  For example 'master@\{1\}'
 165  is the immediate prior value of 'master' while 'master@\{5\}'
 166  is the 5th prior value of 'master'. This suffix may only be used
 167  immediately following a ref name and the ref must have an existing
 168  log ($GIT_DIR/logs/<ref>).
 169
 170* You can use the '@' construct with an empty ref part to get at a
 171  reflog of the current branch. For example, if you are on the
 172  branch 'blabla', then '@\{1\}' means the same as 'blabla@\{1\}'.
 173
 174* A suffix '{caret}' to a revision parameter means the first parent of
 175  that commit object.  '{caret}<n>' means the <n>th parent (i.e.
 176  'rev{caret}'
 177  is equivalent to 'rev{caret}1').  As a special rule,
 178  'rev{caret}0' means the commit itself and is used when 'rev' is the
 179  object name of a tag object that refers to a commit object.
 180
 181* A suffix '{tilde}<n>' to a revision parameter means the commit
 182  object that is the <n>th generation grand-parent of the named
 183  commit object, following only the first parent.  I.e. rev~3 is
 184  equivalent to rev{caret}{caret}{caret} which is equivalent to
 185  rev{caret}1{caret}1{caret}1.  See below for a illustration of
 186  the usage of this form.
 187
 188* A suffix '{caret}' followed by an object type name enclosed in
 189  brace pair (e.g. `v0.99.8{caret}\{commit\}`) means the object
 190  could be a tag, and dereference the tag recursively until an
 191  object of that type is found or the object cannot be
 192  dereferenced anymore (in which case, barf).  `rev{caret}0`
 193  introduced earlier is a short-hand for `rev{caret}\{commit\}`.
 194
 195* A suffix '{caret}' followed by an empty brace pair
 196  (e.g. `v0.99.8{caret}\{\}`) means the object could be a tag,
 197  and dereference the tag recursively until a non-tag object is
 198  found.
 199
 200* A colon, followed by a slash, followed by a text: this names
 201  a commit whose commit message starts with the specified text.
 202  This name returns the youngest matching commit which is
 203  reachable from any ref.  If the commit message starts with a
 204  '!', you have to repeat that;  the special sequence ':/!',
 205  followed by something else than '!' is reserved for now.
 206
 207* A suffix ':' followed by a path; this names the blob or tree
 208  at the given path in the tree-ish object named by the part
 209  before the colon.
 210
 211* A colon, optionally followed by a stage number (0 to 3) and a
 212  colon, followed by a path; this names a blob object in the
 213  index at the given path.  Missing stage number (and the colon
 214  that follows it) names an stage 0 entry.
 215
 216Here is an illustration, by Jon Loeliger.  Both node B and C are
 217a commit parents of commit node A.  Parent commits are ordered
 218left-to-right.
 219
 220    G   H   I   J
 221     \ /     \ /
 222      D   E   F
 223       \  |  / \
 224        \ | /   |
 225         \|/    |
 226          B     C
 227           \   /
 228            \ /
 229             A
 230
 231    A =      = A^0
 232    B = A^   = A^1     = A~1
 233    C = A^2  = A^2
 234    D = A^^  = A^1^1   = A~2
 235    E = B^2  = A^^2
 236    F = B^3  = A^^3
 237    G = A^^^ = A^1^1^1 = A~3
 238    H = D^2  = B^^2    = A^^^2  = A~2^2
 239    I = F^   = B^3^    = A^^3^
 240    J = F^2  = B^3^2   = A^^3^2
 241
 242
 243SPECIFYING RANGES
 244-----------------
 245
 246History traversing commands such as `git-log` operate on a set
 247of commits, not just a single commit.  To these commands,
 248specifying a single revision with the notation described in the
 249previous section means the set of commits reachable from that
 250commit, following the commit ancestry chain.
 251
 252To exclude commits reachable from a commit, a prefix `{caret}`
 253notation is used.  E.g. "`{caret}r1 r2`" means commits reachable
 254from `r2` but exclude the ones reachable from `r1`.
 255
 256This set operation appears so often that there is a shorthand
 257for it.  "`r1..r2`" is equivalent to "`{caret}r1 r2`".  It is
 258the difference of two sets (subtract the set of commits
 259reachable from `r1` from the set of commits reachable from
 260`r2`).
 261
 262A similar notation "`r1\...r2`" is called symmetric difference
 263of `r1` and `r2` and is defined as
 264"`r1 r2 --not $(git-merge-base --all r1 r2)`".
 265It is the set of commits that are reachable from either one of
 266`r1` or `r2` but not from both.
 267
 268Two other shorthands for naming a set that is formed by a commit
 269and its parent commits exists.  `r1{caret}@` notation means all
 270parents of `r1`.  `r1{caret}!` includes commit `r1` but excludes
 271its all parents.
 272
 273Here are a handful examples:
 274
 275   D                G H D
 276   D F              G H I J D F
 277   ^G D             H D
 278   ^D B             E I J F B
 279   B...C            G H D E B C
 280   ^D B C           E I J F B C
 281   C^@              I J F
 282   F^! D            G H D F
 283
 284Author
 285------
 286Written by Linus Torvalds <torvalds@osdl.org> and
 287Junio C Hamano <junkio@cox.net>
 288
 289Documentation
 290--------------
 291Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 292
 293GIT
 294---
 295Part of the gitlink:git[7] suite
 296