git-rev-parse(1)
================

NAME
----
git-rev-parse - Pick out and massage parameters


SYNOPSIS
--------
'git rev-parse' [ --option ] <args>...

DESCRIPTION
-----------

Many git porcelainish commands take mixture of flags
(i.e. parameters that begin with a dash '-') and parameters
meant for the underlying 'git-rev-list' command they use internally
and flags and parameters for the other commands they use
downstream of 'git-rev-list'.  This command is used to
distinguish between them.


OPTIONS
-------
--parseopt::
	Use 'git-rev-parse' in option parsing mode (see PARSEOPT section below).

--keep-dash-dash::
	Only meaningful in `--parseopt` mode. Tells the option parser to echo
	out the first `--` met instead of skipping it.

--revs-only::
	Do not output flags and parameters not meant for
	'git-rev-list' command.

--no-revs::
	Do not output flags and parameters meant for
	'git-rev-list' command.

--flags::
	Do not output non-flag parameters.

--no-flags::
	Do not output flag parameters.

--default <arg>::
	If there is no parameter given by the user, use `<arg>`
	instead.

--verify::
	The parameter given must be usable as a single, valid
	object name.  Otherwise barf and abort.

-q::
--quiet::
	Only meaningful in `--verify` mode. Do not output an error
	message if the first argument is not a valid object name;
	instead exit with non-zero status silently.

--sq::
	Usually the output is made one line per flag and
	parameter.  This option makes output a single line,
	properly quoted for consumption by shell.  Useful when
	you expect your parameter to contain whitespaces and
	newlines (e.g. when using pickaxe `-S` with
	'git-diff-\*').

--not::
	When showing object names, prefix them with '{caret}' and
	strip '{caret}' prefix from the object names that already have
	one.

--symbolic::
	Usually the object names are output in SHA1 form (with
	possible '{caret}' prefix); this option makes them output in a
	form as close to the original input as possible.

--symbolic-full-name::
	This is similar to \--symbolic, but it omits input that
	are not refs (i.e. branch or tag names; or more
	explicitly disambiguating "heads/master" form, when you
	want to name the "master" branch when there is an
	unfortunately named tag "master"), and show them as full
	refnames (e.g. "refs/heads/master").

--all::
	Show all refs found in `$GIT_DIR/refs`.

--branches::
	Show branch refs found in `$GIT_DIR/refs/heads`.

--tags::
	Show tag refs found in `$GIT_DIR/refs/tags`.

--remotes::
	Show tag refs found in `$GIT_DIR/refs/remotes`.

--show-prefix::
	When the command is invoked from a subdirectory, show the
	path of the current directory relative to the top-level
	directory.

--show-cdup::
	When the command is invoked from a subdirectory, show the
	path of the top-level directory relative to the current
	directory (typically a sequence of "../", or an empty string).

--git-dir::
	Show `$GIT_DIR` if defined else show the path to the .git directory.

--is-inside-git-dir::
	When the current working directory is below the repository
	directory print "true", otherwise "false".

--is-inside-work-tree::
	When the current working directory is inside the work tree of the
	repository print "true", otherwise "false".

--is-bare-repository::
	When the repository is bare print "true", otherwise "false".

--short::
--short=number::
	Instead of outputting the full SHA1 values of object names try to
	abbreviate them to a shorter unique name. When no length is specified
	7 is used. The minimum length is 4.

--since=datestring::
--after=datestring::
	Parse the date string, and output the corresponding
	--max-age= parameter for 'git-rev-list'.

--until=datestring::
--before=datestring::
	Parse the date string, and output the corresponding
	--min-age= parameter for 'git-rev-list'.

<args>...::
	Flags and parameters to be parsed.


SPECIFYING REVISIONS
--------------------

A revision parameter typically, but not necessarily, names a
commit object.  They use what is called an 'extended SHA1'
syntax.  Here are various ways to spell object names.  The
ones listed near the end of this list are to name trees and
blobs contained in a commit.

* The full SHA1 object name (40-byte hexadecimal string), or
  a substring of such that is unique within the repository.
  E.g. dae86e1950b1277e545cee180551750029cfe735 and dae86e both
  name the same commit object if there are no other object in
  your repository whose object name starts with dae86e.

* An output from 'git-describe'; i.e. a closest tag, optionally
  followed by a dash and a number of commits, followed by a dash, a
  `g`, and an abbreviated object name.

* A symbolic ref name.  E.g. 'master' typically means the commit
  object referenced by $GIT_DIR/refs/heads/master.  If you
  happen to have both heads/master and tags/master, you can
  explicitly say 'heads/master' to tell git which one you mean.
  When ambiguous, a `<name>` is disambiguated by taking the
  first match in the following rules:

  . if `$GIT_DIR/<name>` exists, that is what you mean (this is usually
    useful only for `HEAD`, `FETCH_HEAD`, `ORIG_HEAD` and `MERGE_HEAD`);

  . otherwise, `$GIT_DIR/refs/<name>` if exists;

  . otherwise, `$GIT_DIR/refs/tags/<name>` if exists;

  . otherwise, `$GIT_DIR/refs/heads/<name>` if exists;

  . otherwise, `$GIT_DIR/refs/remotes/<name>` if exists;

  . otherwise, `$GIT_DIR/refs/remotes/<name>/HEAD` if exists.
+
HEAD names the commit your changes in the working tree is based on.
FETCH_HEAD records the branch you fetched from a remote repository
with your last 'git-fetch' invocation.
ORIG_HEAD is created by commands that moves your HEAD in a drastic
way, to record the position of the HEAD before their operation, so that
you can change the tip of the branch back to the state before you ran
them easily.
MERGE_HEAD records the commit(s) you are merging into your branch
when you run 'git-merge'.

* A ref followed by the suffix '@' with a date specification
  enclosed in a brace
  pair (e.g. '\{yesterday\}', '\{1 month 2 weeks 3 days 1 hour 1
  second ago\}' or '\{1979-02-26 18:30:00\}') to specify the value
  of the ref at a prior point in time.  This suffix may only be
  used immediately following a ref name and the ref must have an
  existing log ($GIT_DIR/logs/<ref>). Note that this looks up the state
  of your *local* ref at a given time; e.g., what was in your local
  `master` branch last week. If you want to look at commits made during
  certain times, see `--since` and `--until`.

* A ref followed by the suffix '@' with an ordinal specification
  enclosed in a brace pair (e.g. '\{1\}', '\{15\}') to specify
  the n-th prior value of that ref.  For example 'master@\{1\}'
  is the immediate prior value of 'master' while 'master@\{5\}'
  is the 5th prior value of 'master'. This suffix may only be used
  immediately following a ref name and the ref must have an existing
  log ($GIT_DIR/logs/<ref>).

* You can use the '@' construct with an empty ref part to get at a
  reflog of the current branch. For example, if you are on the
  branch 'blabla', then '@\{1\}' means the same as 'blabla@\{1\}'.

* The special construct '@\{-<n>\}' means the <n>th branch checked out
  before the current one.

* A suffix '{caret}' to a revision parameter means the first parent of
  that commit object.  '{caret}<n>' means the <n>th parent (i.e.
  'rev{caret}'
  is equivalent to 'rev{caret}1').  As a special rule,
  'rev{caret}0' means the commit itself and is used when 'rev' is the
  object name of a tag object that refers to a commit object.

* A suffix '{tilde}<n>' to a revision parameter means the commit
  object that is the <n>th generation grand-parent of the named
  commit object, following only the first parent.  I.e. rev~3 is
  equivalent to rev{caret}{caret}{caret} which is equivalent to
  rev{caret}1{caret}1{caret}1.  See below for a illustration of
  the usage of this form.

* A suffix '{caret}' followed by an object type name enclosed in
  brace pair (e.g. `v0.99.8{caret}\{commit\}`) means the object
  could be a tag, and dereference the tag recursively until an
  object of that type is found or the object cannot be
  dereferenced anymore (in which case, barf).  `rev{caret}0`
  introduced earlier is a short-hand for `rev{caret}\{commit\}`.

* A suffix '{caret}' followed by an empty brace pair
  (e.g. `v0.99.8{caret}\{\}`) means the object could be a tag,
  and dereference the tag recursively until a non-tag object is
  found.

* A colon, followed by a slash, followed by a text: this names
  a commit whose commit message starts with the specified text.
  This name returns the youngest matching commit which is
  reachable from any ref.  If the commit message starts with a
  '!', you have to repeat that;  the special sequence ':/!',
  followed by something else than '!' is reserved for now.

* A suffix ':' followed by a path; this names the blob or tree
  at the given path in the tree-ish object named by the part
  before the colon.

* A colon, optionally followed by a stage number (0 to 3) and a
  colon, followed by a path; this names a blob object in the
  index at the given path.  Missing stage number (and the colon
  that follows it) names a stage 0 entry. During a merge, stage
  1 is the common ancestor, stage 2 is the target branch's version
  (typically the current branch), and stage 3 is the version from
  the branch being merged.

Here is an illustration, by Jon Loeliger.  Both commit nodes B
and C are parents of commit node A.  Parent commits are ordered
left-to-right.

........................................
G   H   I   J
 \ /     \ /
  D   E   F
   \  |  / \
    \ | /   |
     \|/    |
      B     C
       \   /
        \ /
         A
........................................

    A =      = A^0
    B = A^   = A^1     = A~1
    C = A^2  = A^2
    D = A^^  = A^1^1   = A~2
    E = B^2  = A^^2
    F = B^3  = A^^3
    G = A^^^ = A^1^1^1 = A~3
    H = D^2  = B^^2    = A^^^2  = A~2^2
    I = F^   = B^3^    = A^^3^
    J = F^2  = B^3^2   = A^^3^2


SPECIFYING RANGES
-----------------

History traversing commands such as 'git-log' operate on a set
of commits, not just a single commit.  To these commands,
specifying a single revision with the notation described in the
previous section means the set of commits reachable from that
commit, following the commit ancestry chain.

To exclude commits reachable from a commit, a prefix `{caret}`
notation is used.  E.g. "`{caret}r1 r2`" means commits reachable
from `r2` but exclude the ones reachable from `r1`.

This set operation appears so often that there is a shorthand
for it.  When you have two commits `r1` and `r2` (named according
to the syntax explained in SPECIFYING REVISIONS above), you can ask
for commits that are reachable from r2 excluding those that are reachable
from r1 by "`{caret}r1 r2`" and it can be written as "`r1..r2`".

A similar notation "`r1\...r2`" is called symmetric difference
of `r1` and `r2` and is defined as
"`r1 r2 --not $(git merge-base --all r1 r2)`".
It is the set of commits that are reachable from either one of
`r1` or `r2` but not from both.

Two other shorthands for naming a set that is formed by a commit
and its parent commits exist.  The `r1{caret}@` notation means all
parents of `r1`.  `r1{caret}!` includes commit `r1` but excludes
all of its parents.

Here are a handful of examples:

   D                G H D
   D F              G H I J D F
   ^G D             H D
   ^D B             E I J F B
   B...C            G H D E B C
   ^D B C           E I J F B C
   C^@              I J F
   F^! D            G H D F

PARSEOPT
--------

In `--parseopt` mode, 'git-rev-parse' helps massaging options to bring to shell
scripts the same facilities C builtins have. It works as an option normalizer
(e.g. splits single switches aggregate values), a bit like `getopt(1)` does.

It takes on the standard input the specification of the options to parse and
understand, and echoes on the standard output a line suitable for `sh(1)` `eval`
to replace the arguments with normalized ones.  In case of error, it outputs
usage on the standard error stream, and exits with code 129.

Input Format
~~~~~~~~~~~~

'git-rev-parse --parseopt' input format is fully text based. It has two parts,
separated by a line that contains only `--`. The lines before the separator
(should be more than one) are used for the usage.
The lines after the separator describe the options.

Each line of options has this format:

------------
<opt_spec><flags>* SP+ help LF
------------

`<opt_spec>`::
	its format is the short option character, then the long option name
	separated by a comma. Both parts are not required, though at least one
	is necessary. `h,help`, `dry-run` and `f` are all three correct
	`<opt_spec>`.

`<flags>`::
	`<flags>` are of `*`, `=`, `?` or `!`.
	* Use `=` if the option takes an argument.

	* Use `?` to mean that the option is optional (though its use is discouraged).

	* Use `*` to mean that this option should not be listed in the usage
	  generated for the `-h` argument. It's shown for `--help-all` as
	  documented in linkgit:gitcli[7].

	* Use `!` to not make the corresponding negated long option available.

The remainder of the line, after stripping the spaces, is used
as the help associated to the option.

Blank lines are ignored, and lines that don't match this specification are used
as option group headers (start the line with a space to create such
lines on purpose).

Example
~~~~~~~

------------
OPTS_SPEC="\
some-command [options] <args>...

some-command does foo and bar!
--
h,help    show the help

foo       some nifty option --foo
bar=      some cool option --bar with an argument

  An option group Header
C?        option C with an optional argument"

eval `echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?`
------------

EXAMPLES
--------

* Print the object name of the current commit:
+
------------
$ git rev-parse --verify HEAD
------------

* Print the commit object name from the revision in the $REV shell variable:
+
------------
$ git rev-parse --verify $REV
------------
+
This will error out if $REV is empty or not a valid revision.

* Same as above:
+
------------
$ git rev-parse --default master --verify $REV
------------
+
but if $REV is empty, the commit object name from master will be printed.


Author
------
Written by Linus Torvalds <torvalds@osdl.org> .
Junio C Hamano <gitster@pobox.com> and Pierre Habouzit <madcoder@debian.org>

Documentation
--------------
Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.

GIT
---
Part of the linkgit:git[1] suite
