What are Git hashes?

Greg Foster
Greg Foster
Graphite software engineer

A Git hash, often referred to as a commit hash, is a unique identifier for every single commit in a Git repository. It's generated using the SHA-1 cryptographic hash function, which produces a 40-character string of hexadecimal characters (0-9 and a-f). This hash represents the state of the repository at the time of the commit.

Git hashes are calculated based on the contents of the files in the commit, the metadata of the commit (like timestamp and author), and the parent commit's hash. This dependency chain ensures that every commit is a snapshot not just of the project at a given time, but of its entire history.

The format of a Git hash is a 40-character hexadecimal number. For example, a commit hash might look like this:

Terminal
a1b2c3d4e5f67890abcdef1234567890abcdef12

This example shows the typical structure of a Git hash code. Each part of the hash is directly derived from the content it represents, making every hash unique to its commit.

  1. Integrity: Git hashes are crucial for ensuring the integrity of your code. If even a single byte in your repository changes, the resulting hash will change, which alerts you to alterations.
  2. Traceability: Every commit in Git can be accessed via its unique hash. This allows developers to track changes, revert to previous states, and understand the history of a project.
  3. Merge and rebase: Git uses these hashes to manage merges and rebases, ensuring that changes are applied correctly across different branches.

To see the hashes associated with each commit, you can use the git log command in your terminal:

Terminal
git log

This command displays a list of recent commits, each with its own hash, author, date, and commit message.

Beyond individual commits, Git uses hashes to form what's called a "hash tree" or "commit tree." This tree structure allows Git to quickly compare different versions of a repository, identify divergences, and merge changes. Each commit points to its parent commits by their hashes, creating a linked list from the current state back to the initial commit.

Git hashes are not just theoretical but have practical implications. Hashes are how you refer to specific commits when executing commands like git checkout and git diff.

  • Checking out specific versions: You can use a commit hash with git checkout to view the state of your repository at the time of that commit.

    Terminal
    git checkout a1b2c3d4e5f67890abcdef1234567890abcdef12
  • Comparing changes: Developers can compare different commits by using their hashes.

    Terminal
    git diff a1b2c3d4e5f67890abcdef1234567890abcdef12 anotherHashHere
  • Automated systems: Automated systems, such as Continuous Integration (CI) platforms, rely on commit hashes as precise identifiers to reference the specific state of the codebase at a given point in time. When a developer pushes changes to a repository, the CI system triggers a build process using the commit hash associated with those changes, ensuring that the code being built and tested corresponds exactly to the version of the code that triggered the build. This granular level of referencing enables CI systems to provide accurate feedback on the quality and integrity of the codebase, facilitating rapid development iterations and maintaining the reliability of the software.

Stay unblocked. Ship faster.
Experience the new developer workflow - create, review, and merge code continuously. Get started with one command.
Get started

Give your PR workflow
an upgrade today

Stack easier | Ship smaller | Review quicker

Or install our CLI.
Product Screenshot 1
Product Screenshot 2