GIT-REV-PARSE(1) Git Manual GIT-REV-PARSE(1) (NAME) git-rev-parse - (SYNOPSIS) git rev-parse [] ... (DESCRIPTION) (porcelain) ( - ) git rev-list git rev-list . . " " . (fatal error) . (OPTIONS) (Operation Modes) . --parseopt git rev-parse ( << (PARSEOPT)>> ). . --sq-quote git rev-parse ( << (SQ-QUOTE)>> ). --sq . . . parseopt-- (Options for --parseopt) --keep-dashdash --parseopt . -- (echo) . --stop-at-non-option --parseopt . . . --stuck-long --parseopt . . (Options for Filtering) --revs-only git rev-list . --no-revs git rev-list . --flags . --no-flags . (Options for Output) --default . --prefix git rev-parse . . . : 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 SHA-1 . . / (peeling) ^{type} . git rev-parse "$VAR^{commit}" $VAR (commit-ish) ( ). $VAR git rev-parse "$VAR^{object}" . --end-of-options . -q, --quiet --verify . . SHA-1 (stdout) . --sq . . ( pickaxe -S git diff-*). --sq-quote . --short[=] --verify length . core.abbrev ( git-config(1) ). --not ^ ^ . --abbrev-ref[=(strict|loose)] . core.warnAmbiguousRefs (strict) . --symbolic SHA-1 ( ^) . --symbolic-full-name --symbolic (ref) ( "heads/master" "master" "master" ) ( "refs/heads/master"). --output-object-format=(sha1|sha256|storage) (oid) . "sha1" oid sha1 . "sha256" oid sha256 . "storage" oid . (Options for Objects) --all refs/. --branches[=], --tags[=], --remotes[=] ( refs/heads refs/tags refs/remotes). pattern (shell glob) . (?, * [) /* . --glob= pattern . refs/ . (?, * [) /* . --exclude= --all --branches --tags --remotes --glob . --all --branches --tags --remotes --glob ( ). --branches --tags --remotes refs/heads refs/tags refs/remotes --glob --all refs/ . /* . --exclude-hidden=(fetch|receive|uploadpack) git-fetch git-receive-pack git-upload-pack fetch.hideRefs receive.hideRefs uploadpack.hideRefs transfer.hideRefs ( git-config(1) ) . --all --glob . --disambiguate= . . (Options for Files) --local-env-vars GIT_* ( GIT_DIR GIT_WORK_TREE GIT_EDITOR). . --path-format=(absolute|relative) . absolute (canonical) . relative . . . --path-format : --git-dir $GIT_DIR . .git . . $GIT_DIR stderr . --git-common-dir $GIT_COMMON_DIR $GIT_DIR. --resolve-git-dir gitfile . gitfile . --git-path "$GIT_DIR/" $GIT_OBJECT_DIRECTORY $GIT_INDEX_FILE ... . $GIT_OBJECT_DIRECTORY /foo/bar "git rev-parse --git-path objects/abc" /foo/bar/abc . --show-toplevel ( ) . . --show-superproject-working-tree (superproject) (submodule) . . --shared-index-path (shared index) (split index) split-index . --path-format : --absolute-git-dir --git-dir . --is-inside-git-dir "true" "false". --is-inside-work-tree "true" "false". --is-bare-repository (bare) "true" "false". --is-shallow-repository (shallow) "true" "false". --show-cdup ( "../" ). --show-prefix . --show-object-format[=(storage|input|output|compat)] ( ) .git . . compat . "storage" . --show-ref-format . (Other Options) --since=, --after= --max-age= git rev-list . --until=, --before= --min-age= git rev-list . ... . (SPECIFYING REVISIONS) (revision) . SHA-1 . . blob . "" (raw) . . , e.g. dae86e1950b1277e545cee180551750029cfe735, dae86e SHA-1 ( ) . dae86e1950b1277e545cee180551750029cfe735 dae86e dae86e . , e.g. v1.7.4.2-679-g3bee7fb git describe g . , e.g. master, heads/master, refs/heads/master . master refs/heads/master . heads/master tags/master heads/master . : 1. $GIT_DIR/ ( HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD REBASE_HEAD REVERT_HEAD CHERRY_PICK_HEAD BISECT_HEAD AUTO_MERGE ) 2. refs/ 3. refs/tags/ 4. refs/heads/ 5. refs/remotes/ 6. refs/remotes//HEAD . HEAD . FETCH_HEAD git fetch . ORIG_HEAD HEAD (git am git merge git rebase git reset) HEAD . MERGE_HEAD () git merge . REBASE_HEAD (rebase) edit . REVERT_HEAD git revert . CHERRY_PICK_HEAD git cherry-pick . BISECT_HEAD git bisect --no-checkout . AUTO_MERGE ort . refs/* $GIT_DIR/refs $GIT_DIR/packed-refs . UTF-8 UTF-8 . @ @ HEAD . []@{}, e.g. master@{yesterday}, HEAD@{5 minutes ago} @ ( {yesterday} {1 month 2 weeks 3 days 1 hour 1 second ago} {1979-02-26 18:30:00}) . ($GIT_DIR/logs/). master . --since --until . @{}, e.g. master@{1} @ ( {1} {15}) n- . master@{1} master master@{5} master . ($GIT_DIR/logs/). @{}, e.g. @{1} @ reflog . blabla @{1} blabla@{1} . @{-}, e.g. @{-1} @{-} - / / checkout . []@{upstream}, e.g. master@{upstream}, @{u} B X ( branch..merge) R ( X R refs/remotes/R/X ) . []@{push}, e.g. master@{push}, @{push} @{push} branchname ( HEAD ) git push << >>. @{upstream} . : $ git config push.default current $ git config remote.pushdefault myfork $ git switch -c mybranch origin/master $ git rev-parse --symbolic-full-name @{upstream} refs/remotes/origin/master $ git rev-parse --symbolic-full-name @{push} refs/remotes/myfork/mybranch (triangular workflow) pull push . @{push} @{upstream} . . ^[], e.g. HEAD^, v1.5.1^0 ^ . ^ - ( ^ ^1 ). ^0 . ~[], e.g. HEAD~, master~3 ~ . ~ - . ~3 ^^^ ^1^1^1 . . ^{}, e.g. v0.99.8^{commit} ^ (dereference) ( ). commit-ish ^{commit} . tree-ish ^{tree} . ^0 ^{commit} . ^{object} . ^{tag} . ^{}, e.g. v0.99.8^{} ^ . ^{/}, e.g. HEAD^{/fix nasty bug} ^ :/fix nasty bug ^ . :/, e.g. :/fix nasty bug (regular expression) . HEAD . . :/^foo . :/! . :/!-foo :/!!foo ! foo . :/! . . :, e.g. HEAD:README, master:./README : blob (tree-ish) . ./ ../ . . blob . :[:], e.g. :0:README, :README (stage number 0 3) blob (index) . ( ) 0 . 1 2 ( ) 3 . (Jon Loeliger) . B C A . . G H I J \ / \ / D E F \ | / \ \ | / | \|/ | B C \ / \ / A A = = A^0 B = A^ = A^1 = A~1 C = = 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) git log . (reachable) . . (ancestry chain) . ( " " revision range ) . (Commit Exclusions) ^ ( / caret) ^ . ^r1 r2 r2 r1 ( r1 ). (Dotted Range Notations) .. ( ) ^r1 r2 . r1 r2 ( << (SPECIFYING REVISIONS)>> ) r2 r1 ^r1 r2 r1..r2 . ... ( ) r1...r2 (symmetric difference) r1 r2 r1 r2 --not $(git merge-base --all r1 r2) . r1 ( ) r2 ( ) . HEAD . origin.. origin..HEAD " origin " ..origin HEAD..origin " origin " .. HEAD..HEAD HEAD . ( "git range-diff R1 R2" ) . "git" . " " : $ git log A..B C..D . B D A C . : ---A---B---o---o---C---D A B C D . ^ (Other ^ Parent Shorthand Notations) . r1^@ r1 . r1^! r1 . r1 . ^-[] - ( ^..) = 1 . ^- ( ) . ^ . HEAD^2^@ HEAD^@^2. (REVISION RANGE SUMMARY) ( ). ^ ( ). .. . HEAD . ... . HEAD . ^@, e.g. HEAD^@ ^ at ( ). ^!, e.g. HEAD^! ^ ^ ( ) . ^-, e.g. HEAD^-, HEAD^-2 ^.. . : Args Expanded arguments Selected commits D G H D D F G H I J D F ^G D H D ^D B E I J F B ^D B C E I J F B C C I J F C B..C = ^B C C B...C = B ^F C G H D E B C B^- = B^..B = ^B^1 B E I J F B C^@ = C^1 = F I J F B^@ = B^1 B^2 B^3 = D E F D G H E F I J C^! = C ^C^@ = C ^C^1 = C ^F C B^! = B ^B^@ = B ^B^1 ^B^2 ^B^3 = B ^D ^E ^F B F^! D = F ^I ^J D G H D F (PARSEOPT) --parseopt git rev-parse C ( builtin) . ( ) getopt(1). eval sh(1) (echo) . (usage) . : eval . . (Input Format) git rev-parse --parseopt . -- . ( ) . . : *? SP+ help LF . . . h,help dry-run f . * = ? ! . o = . o ? . --stuck-long . o * -h . --help-all gitcli(7) . o ! . . . . . ( ). (Example) OPTS_SPEC="\ some-command [] ... 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) "$@" -h --help : usage: some-command [] ... some-command does foo and bar! -h, --help show the help --[no-]foo some nifty option --foo --[no-]bar ... some cool option --bar with an argument --[no-]baz another cool option --baz with a named argument --[no-]qux[=] qux may take a path argument but has meaning by itself An option group Header -C[...] option C with an optional argument (SQ-QUOTE) --sq-quote git rev-parse eval sh(1) . --sq-quote . . git rev-parse --sq . (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) o : $ git rev-parse --verify HEAD o $REV: $ git rev-parse --verify --end-of-options $REV^{commit} $REV . o : $ git rev-parse --default master --verify --end-of-options $REV $REV master . (SEE ALSO) git(1) git-rev-list(1) git-check-ref-format(1) (GIT) git(1) Git 2.55.0 2026-06-29 GIT-REV-PARSE(1)