|  | git-rev-parse(1) | 
|  | ================ | 
|  |  | 
|  | NAME | 
|  | ---- | 
|  | git-rev-parse - Pick out and massage parameters | 
|  |  | 
|  |  | 
|  | SYNOPSIS | 
|  | -------- | 
|  | [verse] | 
|  | '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 | 
|  | ------- | 
|  |  | 
|  | 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). | 
|  |  | 
|  | --sq-quote:: | 
|  | Use 'git rev-parse' in shell quoting mode (see SQ-QUOTE | 
|  | section below). In contrast to the `--sq` option below, this | 
|  | mode does only quoting. Nothing else is done to command input. | 
|  |  | 
|  | 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)" | 
|  | 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 "\^{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. | 
|  |  | 
|  | -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. | 
|  | SHA-1s for valid object names are printed to stdout on success. | 
|  |  | 
|  | --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-{asterisk}'). In contrast to the `--sq-quote` option, | 
|  | the command input is still interpreted as usual. | 
|  |  | 
|  | --not:: | 
|  | When showing object names, prefix them with '{caret}' and | 
|  | strip '{caret}' prefix from the object names that already have | 
|  | one. | 
|  |  | 
|  | --abbrev-ref[=(strict|loose)]:: | 
|  | A non-ambiguous short name of the objects name. | 
|  | The option core.warnAmbiguousRefs is used to select the strict | 
|  | abbreviation mode. | 
|  |  | 
|  | --short:: | 
|  | --short=number:: | 
|  | Instead of outputting the full SHA-1 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. | 
|  |  | 
|  | --symbolic:: | 
|  | Usually the object names are output in SHA-1 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"). | 
|  |  | 
|  | Options for Objects | 
|  | ~~~~~~~~~~~~~~~~~~~ | 
|  |  | 
|  | --all:: | 
|  | Show all refs found in `refs/`. | 
|  |  | 
|  | --branches[=pattern]:: | 
|  | --tags[=pattern]:: | 
|  | --remotes[=pattern]:: | 
|  | Show all branches, tags, or remote-tracking branches, | 
|  | respectively (i.e., refs found in `refs/heads`, | 
|  | `refs/tags`, or `refs/remotes`, respectively). | 
|  | + | 
|  | If a `pattern` is given, only refs matching the given shell glob are | 
|  | shown.  If the pattern does not contain a globbing character (`?`, | 
|  | `*`, or `[`), it is turned into a prefix match by appending `/*`. | 
|  |  | 
|  | --glob=pattern:: | 
|  | Show all refs matching the shell glob pattern `pattern`. If | 
|  | the pattern does not start with `refs/`, this is automatically | 
|  | prepended.  If the pattern does not contain a globbing | 
|  | character (`?`, `*`, or `[`), it is turned into a prefix | 
|  | match by appending `/*`. | 
|  |  | 
|  | --exclude=<glob-pattern>:: | 
|  | Do not include refs matching '<glob-pattern>' that the next `--all`, | 
|  | `--branches`, `--tags`, `--remotes`, or `--glob` would otherwise | 
|  | consider. Repetitions of this option accumulate exclusion patterns | 
|  | up to the next `--all`, `--branches`, `--tags`, `--remotes`, or | 
|  | `--glob` option (other options or arguments do not clear | 
|  | accumlated patterns). | 
|  | + | 
|  | The patterns given should not begin with `refs/heads`, `refs/tags`, or | 
|  | `refs/remotes` when applied to `--branches`, `--tags`, or `--remotes`, | 
|  | respectively, and they must begin with `refs/` when applied to `--glob` | 
|  | or `--all`. If a trailing '/{asterisk}' is intended, it must be given | 
|  | explicitly. | 
|  |  | 
|  | --disambiguate=<prefix>:: | 
|  | Show every object whose name begins with the given prefix. | 
|  | The <prefix> must be at least 4 hexadecimal digits long to | 
|  | avoid listing each and every object in the repository by | 
|  | mistake. | 
|  |  | 
|  | Options for Files | 
|  | ~~~~~~~~~~~~~~~~~ | 
|  |  | 
|  | --local-env-vars:: | 
|  | List the GIT_* environment variables that are local to the | 
|  | repository (e.g. GIT_DIR or GIT_WORK_TREE, but not GIT_EDITOR). | 
|  | Only the names of the variables are listed, not their value, | 
|  | even if they are set. | 
|  |  | 
|  | --git-dir:: | 
|  | Show `$GIT_DIR` if defined. Otherwise show the path to | 
|  | the .git directory. The path shown, when relative, is | 
|  | relative to the current working directory. | 
|  | + | 
|  | If `$GIT_DIR` is not defined and the current directory | 
|  | is not detected to lie in a Git repository or work tree | 
|  | print a message to stderr and exit with nonzero status. | 
|  |  | 
|  | --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". | 
|  |  | 
|  | --resolve-git-dir <path>:: | 
|  | Check if <path> is a valid repository or a gitfile that | 
|  | points at a valid repository, and print the location of the | 
|  | repository.  If <path> is a gitfile then the resolved path | 
|  | to the real repository is printed. | 
|  |  | 
|  | --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). | 
|  |  | 
|  | --show-prefix:: | 
|  | When the command is invoked from a subdirectory, show the | 
|  | path of the current directory relative to the top-level | 
|  | directory. | 
|  |  | 
|  | --show-toplevel:: | 
|  | Show the absolute path of the top-level directory. | 
|  |  | 
|  | --shared-index-path:: | 
|  | Show the path to the shared index file in split index mode, or | 
|  | empty if not in split-index mode. | 
|  |  | 
|  | Other Options | 
|  | ~~~~~~~~~~~~~ | 
|  |  | 
|  | --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. | 
|  |  | 
|  |  | 
|  | include::revisions.txt[] | 
|  |  | 
|  | 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 string 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. | 
|  |  | 
|  | Note: Make sure you quote the result when passing it to `eval`.  See | 
|  | below for an example. | 
|  |  | 
|  | 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 one or more) are used for the usage. | 
|  | The lines after the separator describe the options. | 
|  |  | 
|  | Each line of options has this format: | 
|  |  | 
|  | ------------ | 
|  | <opt-spec><flags>*<arg-hint>? 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 takes an optional argument. You | 
|  | probably want to use the `--stuck-long` mode to be able to | 
|  | unambiguously parse the optional argument. | 
|  |  | 
|  | * 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. | 
|  |  | 
|  | `<arg-hint>`:: | 
|  | `<arg-hint>`, if specified, is used as a name of the argument in the | 
|  | help output, for options that take arguments. `<arg-hint>` is | 
|  | terminated by the first whitespace.  It is customary to use a | 
|  | dash to separate words in a multi-word argument hint. | 
|  |  | 
|  | 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 | 
|  | baz=arg   another cool option --baz with a named argument | 
|  | qux?path  qux may take a path argument but has meaning by itself | 
|  |  | 
|  | An option group Header | 
|  | C?        option C with an optional argument" | 
|  |  | 
|  | eval "$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)" | 
|  | ------------ | 
|  |  | 
|  |  | 
|  | Usage text | 
|  | ~~~~~~~~~~ | 
|  |  | 
|  | When `"$@"` is `-h` or `--help` in the above example, the following | 
|  | usage text would be shown: | 
|  |  | 
|  | ------------ | 
|  | usage: 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 | 
|  | --baz <arg>           another cool option --baz with a named argument | 
|  | --qux[=<path>]        qux may take a path argument but has meaning by itself | 
|  |  | 
|  | An option group Header | 
|  | -C[...]               option C with an optional argument | 
|  | ------------ | 
|  |  | 
|  | SQ-QUOTE | 
|  | -------- | 
|  |  | 
|  | In `--sq-quote` mode, 'git rev-parse' echoes on the standard output a | 
|  | single line suitable for `sh(1)` `eval`. This line is made by | 
|  | normalizing the arguments following `--sq-quote`. Nothing other than | 
|  | quoting the arguments is done. | 
|  |  | 
|  | If you want command input to still be interpreted as usual by | 
|  | 'git rev-parse' before the output is shell quoted, see the `--sq` | 
|  | option. | 
|  |  | 
|  | Example | 
|  | ~~~~~~~ | 
|  |  | 
|  | ------------ | 
|  | $ cat >your-git-script.sh <<\EOF | 
|  | #!/bin/sh | 
|  | args=$(git rev-parse --sq-quote "$@")   # quote user-supplied arguments | 
|  | command="git frotz -n24 $args"          # and use it inside a handcrafted | 
|  | # command line | 
|  | eval "$command" | 
|  | EOF | 
|  |  | 
|  | $ sh your-git-script.sh "a b'c" | 
|  | ------------ | 
|  |  | 
|  | 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^{commit} | 
|  | ------------ | 
|  | + | 
|  | This will error out if $REV is empty or not a valid revision. | 
|  |  | 
|  | * Similar to above: | 
|  | + | 
|  | ------------ | 
|  | $ git rev-parse --default master --verify $REV | 
|  | ------------ | 
|  | + | 
|  | but if $REV is empty, the commit object name from master will be printed. | 
|  |  | 
|  | GIT | 
|  | --- | 
|  | Part of the linkgit:git[1] suite |