Search code examples
gitgit-rev-parse

What does git rev-parse do?


What does git rev-parse do?

I have read the man page but it raised more questions than answers. Things like:

Pick out and massage parameters

Massage? What does that mean?

I'm using as a resolver (to SHA1) of revision specifiers, like

git rev-parse HEAD^

or

git rev-parse origin/master

Is this the command’s purpose? If not, is even correct to use it to achieve this?


Solution

  • git rev-parse is an ancillary plumbing command primarily used for manipulation.

    One common usage of git rev-parse is to print the SHA1 hashes given a revision specifier. In addition, it has various options to format this output such as --short for printing a shorter unique SHA1.

    There are other use cases as well (in scripts and other tools built on top of git) that I've used for:

    • --verify to verify that the specified object is a valid git object.
    • --git-dir for displaying the abs/relative path of the .git directory.
    • Checking if you're currently within a repository using --is-inside-git-dir or within a work-tree using --is-inside-work-tree
    • Checking if the repo is a bare using --is-bare-repository
    • Printing SHA1 hashes of branches (--branches), tags (--tags) and the refs can also be filtered based on the remote (using --remote)
    • --parse-opt to normalize arguments in a script (kind of similar to getopt) and print an output string that can be used with eval

    Massage just implies that it is possible to convert the info from one form into another i.e. a transformation command. These are some quick examples I can think of:

    • a branch or tag name into the commit's SHA1 it is pointing to so that it can be passed to a plumbing command which only accepts SHA1 values for the commit.
    • a revision range A..B for git log or git diff into the equivalent arguments for the underlying plumbing command as B ^A