git-rev-parse(1)
================
NAME
----
git-rev-parse - Pick out and massage parameters
SYNOPSIS
--------
[verse]
'git rev-parse' [<options>] <arg>...
DESCRIPTION
-----------
Many Git porcelainish commands take a 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'. The primary purpose of this command
is to allow calling programs to distinguish between them. There are
a few other operation modes that have nothing to do with the above
"help parse command line options".
Unless otherwise specified, most of the options and operation modes
require you to run this command inside a git repository or a working
tree that is under the control of a git repository, and will give you
a fatal error otherwise.
OPTIONS
-------
Operation Modes
~~~~~~~~~~~~~~~
Each of these options must appear first on the command line.
--parseopt::
Use 'git rev-parse' in option parsing mode (see PARSEOPT section below).
The command in this mode can be used outside a repository or
a working tree controlled by a repository.
--sq-quote::
Use 'git rev-parse' in shell quoting mode (see SQ-QUOTE
section below). In contrast to the `--sq` option below, this
mode only does quoting. Nothing else is done to command input.
The command in this mode can be used outside a repository or
a working tree controlled by a repository.
Options for --parseopt
~~~~~~~~~~~~~~~~~~~~~~
--keep-dashdash::
Only meaningful in `--parseopt` mode. Tells the option parser to echo
out the first `--` met instead of skipping it.
--stop-at-non-option::
Only meaningful in `--parseopt` mode. Lets the option parser stop at
the first non-option argument. This can be used to parse sub-commands
that take options themselves.
--stuck-long::
Only meaningful in `--parseopt` mode. Output the options in their
long form if available, and with their arguments stuck.
Options for Filtering
~~~~~~~~~~~~~~~~~~~~~
--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.
Options for Output
~~~~~~~~~~~~~~~~~~
--default <arg>::
If there is no parameter given by the user, use `<arg>`
instead.
--prefix <arg>::
Behave as if 'git rev-parse' was invoked from the `<arg>`
subdirectory of the working tree. Any relative filenames are
resolved as if they are prefixed by `<arg>` and will be printed
in that form.
+
This can be used to convert arguments to a command run in a subdirectory
so that they can still be used after moving to the top-level of the
repository. For example:
+
----
prefix=$(git rev-parse --show-prefix)
cd "$(git rev-parse --show-toplevel)"
# rev-parse provides the -- needed for 'set'
eval "set $(git rev-parse --sq --prefix "$prefix" -- "$@")"
----
--verify::
Verify that exactly one parameter is provided, and that it
can be turned into a raw 20-byte SHA-1 that can be used to
access the object database. If so, emit it to the standard
output; otherwise, error out.
+
If you want to make sure that the output actually names an object in
your object database and/or can be used as a specific type of object
you require, you can add the `^{type}` peeling operator to the parameter.
For example, `git rev-parse "$VAR^{commit}"` will make sure `$VAR`
names an existing object that is a commit-ish (i.e. a commit, or an
annotated tag that points at a commit). To make sure that `$VAR`
names an existing object of any type, `git rev-parse "$VAR^{object}"`
can be used.
+
Note that if you are verifying a name from an untrusted source, it is
wise to use `--end-of-options` so that the name argument is not mistaken
for another option.
-q::
--quiet::
Only meaningful in `--verify` mode. Do not output an