AlgoMaster Logo

git reflog

9 min readUpdated December 6, 2025
Listen to this chapter
Unlock Audio

It's easy to lose track of where you are in your Git history, especially when you're juggling branches and commits. Imagine you're working on a new feature, and in the process, you accidentally reset your branch or made a series of changes you want to undo.

Fortunately, Git has a powerful safety net called reflog that can help you recover from these missteps and regain your footing.

Understanding Reflog

The reference log, or reflog, is a mechanism in Git that keeps a record of where your branches and HEAD have been over time. Unlike a traditional commit history, which is linear, the reflog captures every movement of HEAD and other references, including those you might not even realize you've made. This is invaluable for recovering lost commits and understanding the evolution of your repository.

When you perform operations like commit, merge, rebase, or even checkout, these actions are logged in the reflog. Each entry records the commit hash, the action taken, and the timestamp, giving you a detailed picture of your project's history.

Accessing Reflog

You can view the reflog using the command:

This command outputs a list of the most recent actions involving HEAD, along with their corresponding commit hashes. Here's an example of the output you might see:

Each entry is prefixed by HEAD@{n}, indicating the position of that entry in the reflog. The most recent entry is HEAD@{0}, and as you go further back, the numbers increase.

Reflog Entries Explained

A reflog entry is composed of:

  • Commit Hash: The SHA-1 hash of the commit. This uniquely identifies the commit in the repository.
  • Reference: This shows which reference was updated, typically HEAD.
  • Action: Describes what action was performed, such as commit, checkout, or merge.
  • Timestamp: The date and time the action took place.

Understanding these components helps you navigate the reflog effectively, allowing you to identify the changes you want to recover.

Common Use Cases for Reflog

Reflog can be a lifesaver in various scenarios. Here are some practical use cases:

Recovering Lost Commits

If you accidentally reset your branch or performed a destructive operation, you can use the reflog to find the lost commit and restore it. For example, if you realize you've lost a commit after a hard reset:

  1. Use git reflog to find the commit hash of the lost commit.
  2. Restore it with:

Alternatively, you can create a new branch from that commit:

This method allows you to recover your work without losing any data.

Undoing a Bad Merge

If you merged a branch and later decided it was a mistake, reflog helps you retrace your steps. After a bad merge, run git reflog to find the commit just before the merge:

This command takes you back to the state before the merge, allowing you to reconsider your changes.

Revisiting a Previous State

Reflog also allows you to revisit any point in your project’s history. If you want to see how your project was working at a previous commit, simply check out that commit using its hash:

This provides a snapshot of your project at that moment, which can be useful for debugging or reviewing past work.

The Lifespan of Reflog Entries

Reflog entries don’t last forever. By default, Git keeps reflog entries for 90 days. After that, older entries are pruned. This means you need to act quickly if you want to recover a recent change.

You can also manage the reflog expiration with the following configurations:

  • gc.reflogExpire controls how long to keep reflog entries.
  • gc.reflogExpireUnreachable determines how long to keep entries that are no longer reachable from any branch or tag.

You can modify these settings by running:

Adjusting these values can provide a longer safety net for your reflog entries, especially if you frequently experiment with your commits.

Advanced Reflog Techniques

While the basic use of reflog is straightforward, there are more advanced techniques that can enhance your workflow.

Using Reflog with Stashes

If you tend to use git stash, the reflog can also help you recover stashed changes. After stashing, if you forget what you stashed or want to check your stash history, you can use:

While this command shows you the stashes, if you need to recover a specific stash, you can find its corresponding commit in the reflog and apply it back to your working directory.

Combining Reflog with Other Git Commands

Reflog can also be combined with commands like reset and rebase for more sophisticated workflows. For instance, if you find yourself in a confusing state after a rebase, the reflog can help you identify the last known good state.

You can use:

This command resets your branch to the state it was in at that specific reflog entry.

Reflog and Collaboration

In collaborative environments, understanding reflog becomes even more critical. While reflog is local, it can help you to recover your changes before pushing them to a shared repository. It’s a great way to ensure that you don’t lose important work before sharing it with your team.

If a colleague accidentally pushes a commit you want to undo, you can use reflog to navigate back to your preferred state and re-push the changes.

Now that you understand how to leverage the reflog for recovery and navigation within your Git history, you have a powerful tool at your disposal. This knowledge will empower you to handle mistakes with confidence and explore the intricacies of your project’s development.

In the next chapter, we will dive deep into various strategies for retrieving and restoring commits that may seem permanently lost, ensuring that you never have to panic over a missing commit again.