1git-rev-parse(1) 2================ 3 4NAME 5---- 6git-rev-parse - Pick out and massage parameters 7 8 9SYNOPSIS 10-------- 11[verse] 12'git rev-parse' [ --option ] <args>... 13 14DESCRIPTION 15----------- 16 17Many Git porcelainish commands take mixture of flags 18(i.e. parameters that begin with a dash '-') and parameters 19meant for the underlying 'git rev-list' command they use internally 20and flags and parameters for the other commands they use 21downstream of 'git rev-list'. This command is used to 22distinguish between them. 23 24 25OPTIONS 26------- 27--parseopt:: 28 Use 'git rev-parse' in option parsing mode (see PARSEOPT section below). 29 30--keep-dashdash:: 31 Only meaningful in `--parseopt` mode. Tells the option parser to echo 32 out the first `--` met instead of skipping it. 33 34--stop-at-non-option:: 35 Only meaningful in `--parseopt` mode. Lets the option parser stop at 36 the first non-option argument. This can be used to parse sub-commands 37 that take options themselves. 38 39--sq-quote:: 40 Use 'git rev-parse' in shell quoting mode (see SQ-QUOTE 41 section below). In contrast to the `--sq` option below, this 42 mode does only quoting. Nothing else is done to command input. 43 44--revs-only:: 45 Do not output flags and parameters not meant for 46 'git rev-list' command. 47 48--no-revs:: 49 Do not output flags and parameters meant for 50 'git rev-list' command. 51 52--flags:: 53 Do not output non-flag parameters. 54 55--no-flags:: 56 Do not output flag parameters. 57 58--default <arg>:: 59 If there is no parameter given by the user, use `<arg>` 60 instead. 61 62--prefix <arg>:: 63 Behave as if 'git rev-parse' was invoked from the `<arg>` 64 subdirectory of the working tree. Any relative filenames are 65 resolved as if they are prefixed by `<arg>` and will be printed 66 in that form. 67+ 68This can be used to convert arguments to a command run in a subdirectory 69so that they can still be used after moving to the top-level of the 70repository. For example: 71+ 72---- 73prefix=$(git rev-parse --show-prefix) 74cd "$(git rev-parse --show-toplevel)" 75eval "set -- $(git rev-parse --sq --prefix "$prefix" "$@")" 76---- 77 78--verify:: 79 Verify that exactly one parameter is provided, and that it 80 can be turned into a raw 20-byte SHA-1 that can be used to 81 access the object database. If so, emit it to the standard 82 output; otherwise, error out. 83+ 84If you want to make sure that the output actually names an object in 85your object database and/or can be used as a specific type of object 86you require, you can add "^{type}" peeling operator to the parameter. 87For example, `git rev-parse "$VAR^{commit}"` will make sure `$VAR` 88names an existing object that is a commit-ish (i.e. a commit, or an 89annotated tag that points at a commit). To make sure that `$VAR` 90names an existing object of any type, `git rev-parse "$VAR^{object}"` 91can be used. 92 93-q:: 94--quiet:: 95 Only meaningful in `--verify` mode. Do not output an error 96 message if the first argument is not a valid object name; 97 instead exit with non-zero status silently. 98 99--sq:: 100 Usually the output is made one line per flag and 101 parameter. This option makes output a single line, 102 properly quoted for consumption by shell. Useful when 103 you expect your parameter to contain whitespaces and 104 newlines (e.g. when using pickaxe `-S` with 105 'git diff-{asterisk}'). In contrast to the `--sq-quote` option, 106 the command input is still interpreted as usual. 107 108--not:: 109 When showing object names, prefix them with '{caret}' and 110 strip '{caret}' prefix from the object names that already have 111 one. 112 113--symbolic:: 114 Usually the object names are output in SHA-1 form (with 115 possible '{caret}' prefix); this option makes them output in a 116 form as close to the original input as possible. 117 118--symbolic-full-name:: 119 This is similar to \--symbolic, but it omits input that 120 are not refs (i.e. branch or tag names; or more 121 explicitly disambiguating "heads/master" form, when you 122 want to name the "master" branch when there is an 123 unfortunately named tag "master"), and show them as full 124 refnames (e.g. "refs/heads/master"). 125 126--abbrev-ref[=(strict|loose)]:: 127 A non-ambiguous short name of the objects name. 128 The option core.warnAmbiguousRefs is used to select the strict 129 abbreviation mode. 130 131--disambiguate=<prefix>:: 132 Show every object whose name begins with the given prefix. 133 The <prefix> must be at least 4 hexadecimal digits long to 134 avoid listing each and every object in the repository by 135 mistake. 136 137--all:: 138 Show all refs found in `refs/`. 139 140--branches[=pattern]:: 141--tags[=pattern]:: 142--remotes[=pattern]:: 143 Show all branches, tags, or remote-tracking branches, 144 respectively (i.e., refs found in `refs/heads`, 145 `refs/tags`, or `refs/remotes`, respectively). 146+ 147If a `pattern` is given, only refs matching the given shell glob are 148shown. If the pattern does not contain a globbing character (`?`, 149`*`, or `[`), it is turned into a prefix match by appending `/*`. 150 151--glob=pattern:: 152 Show all refs matching the shell glob pattern `pattern`. If 153 the pattern does not start with `refs/`, this is automatically 154 prepended. If the pattern does not contain a globbing 155 character (`?`, `*`, or `[`), it is turned into a prefix 156 match by appending `/*`. 157 158--exclude=<glob-pattern>:: 159 Do not include refs matching '<glob-pattern>' that the next `--all`, 160 `--branches`, `--tags`, `--remotes`, or `--glob` would otherwise 161 consider. Repetitions of this option accumulate exclusion patterns 162 up to the next `--all`, `--branches`, `--tags`, `--remotes`, or 163 `--glob` option (other options or arguments do not clear 164 accumlated patterns). 165+ 166The patterns given should not begin with `refs/heads`, `refs/tags`, or 167`refs/remotes` when applied to `--branches`, `--tags`, or `--remotes`, 168respectively, and they must begin with `refs/` when applied to `--glob` 169or `--all`. If a trailing '/{asterisk}' is intended, it must be given 170explicitly. 171 172--show-toplevel:: 173 Show the absolute path of the top-level directory. 174 175--show-prefix:: 176 When the command is invoked from a subdirectory, show the 177 path of the current directory relative to the top-level 178 directory. 179 180--show-cdup:: 181 When the command is invoked from a subdirectory, show the 182 path of the top-level directory relative to the current 183 directory (typically a sequence of "../", or an empty string). 184 185--git-dir:: 186 Show `$GIT_DIR` if defined. Otherwise show the path to 187 the .git directory. The path shown, when relative, is 188 relative to the current working directory. 189+ 190If `$GIT_DIR` is not defined and the current directory 191is not detected to lie in a Git repository or work tree 192print a message to stderr and exit with nonzero status. 193 194--is-inside-git-dir:: 195 When the current working directory is below the repository 196 directory print "true", otherwise "false". 197 198--is-inside-work-tree:: 199 When the current working directory is inside the work tree of the 200 repository print "true", otherwise "false". 201 202--is-bare-repository:: 203 When the repository is bare print "true", otherwise "false". 204 205--local-env-vars:: 206 List the GIT_* environment variables that are local to the 207 repository (e.g. GIT_DIR or GIT_WORK_TREE, but not GIT_EDITOR). 208 Only the names of the variables are listed, not their value, 209 even if they are set. 210 211--short:: 212--short=number:: 213 Instead of outputting the full SHA-1 values of object names try to 214 abbreviate them to a shorter unique name. When no length is specified 215 7 is used. The minimum length is 4. 216 217--since=datestring:: 218--after=datestring:: 219 Parse the date string, and output the corresponding 220 --max-age= parameter for 'git rev-list'. 221 222--until=datestring:: 223--before=datestring:: 224 Parse the date string, and output the corresponding 225 --min-age= parameter for 'git rev-list'. 226 227<args>...:: 228 Flags and parameters to be parsed. 229 230--resolve-git-dir <path>:: 231 Check if <path> is a valid repository or a gitfile that 232 points at a valid repository, and print the location of the 233 repository. If <path> is a gitfile then the resolved path 234 to the real repository is printed. 235 236 237include::revisions.txt[] 238 239PARSEOPT 240-------- 241 242In `--parseopt` mode, 'git rev-parse' helps massaging options to bring to shell 243scripts the same facilities C builtins have. It works as an option normalizer 244(e.g. splits single switches aggregate values), a bit like `getopt(1)` does. 245 246It takes on the standard input the specification of the options to parse and 247understand, and echoes on the standard output a string suitable for `sh(1)` `eval` 248to replace the arguments with normalized ones. In case of error, it outputs 249usage on the standard error stream, and exits with code 129. 250 251Note: Make sure you quote the result when passing it to `eval`. See 252below for an example. 253 254Input Format 255~~~~~~~~~~~~ 256 257'git rev-parse --parseopt' input format is fully text based. It has two parts, 258separated by a line that contains only `--`. The lines before the separator 259(should be more than one) are used for the usage. 260The lines after the separator describe the options. 261 262Each line of options has this format: 263 264------------ 265<opt_spec><flags>* SP+ help LF 266------------ 267 268`<opt_spec>`:: 269 its format is the short option character, then the long option name 270 separated by a comma. Both parts are not required, though at least one 271 is necessary. `h,help`, `dry-run` and `f` are all three correct 272 `<opt_spec>`. 273 274`<flags>`:: 275 `<flags>` are of `*`, `=`, `?` or `!`. 276 * Use `=` if the option takes an argument. 277 278 * Use `?` to mean that the option is optional (though its use is discouraged). 279 280 * Use `*` to mean that this option should not be listed in the usage 281 generated for the `-h` argument. It's shown for `--help-all` as 282 documented in linkgit:gitcli[7]. 283 284 * Use `!` to not make the corresponding negated long option available. 285 286The remainder of the line, after stripping the spaces, is used 287as the help associated to the option. 288 289Blank lines are ignored, and lines that don't match this specification are used 290as option group headers (start the line with a space to create such 291lines on purpose). 292 293Example 294~~~~~~~ 295 296------------ 297OPTS_SPEC="\ 298some-command [options] <args>... 299 300some-command does foo and bar! 301-- 302h,help show the help 303 304foo some nifty option --foo 305bar= some cool option --bar with an argument 306 307 An option group Header 308C? option C with an optional argument" 309 310eval "$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)" 311------------ 312 313SQ-QUOTE 314-------- 315 316In `--sq-quote` mode, 'git rev-parse' echoes on the standard output a 317single line suitable for `sh(1)` `eval`. This line is made by 318normalizing the arguments following `--sq-quote`. Nothing other than 319quoting the arguments is done. 320 321If you want command input to still be interpreted as usual by 322'git rev-parse' before the output is shell quoted, see the `--sq` 323option. 324 325Example 326~~~~~~~ 327 328------------ 329$ cat >your-git-script.sh <<\EOF 330#!/bin/sh 331args=$(git rev-parse --sq-quote "$@") # quote user-supplied arguments 332command="git frotz -n24 $args" # and use it inside a handcrafted 333 # command line 334eval "$command" 335EOF 336 337$ sh your-git-script.sh "a b'c" 338------------ 339 340EXAMPLES 341-------- 342 343* Print the object name of the current commit: 344+ 345------------ 346$ git rev-parse --verify HEAD 347------------ 348 349* Print the commit object name from the revision in the $REV shell variable: 350+ 351------------ 352$ git rev-parse --verify $REV^{commit} 353------------ 354+ 355This will error out if $REV is empty or not a valid revision. 356 357* Similar to above: 358+ 359------------ 360$ git rev-parse --default master --verify $REV 361------------ 362+ 363but if $REV is empty, the commit object name from master will be printed. 364 365GIT 366--- 367Part of the linkgit:git[1] suite