Skip to content
DeveloperMemos

A Quick Look at `git reflog`

Git, Version Control, Command Line2 min read

As developers, we often find ourselves making mistakes while working with version control systems like Git. Sometimes, we accidentally delete or lose important commits, branches, or changes. Luckily, Git has a powerful command called git reflog that can help us recover lost commits and navigate through our repository's history more effectively. In this article, we'll dive into the world of git reflog and understand how it can be used to undo and recover from various Git mishaps.

Prerequisites

Before we begin exploring git reflog, make sure you have Git installed on your system. You can check if Git is installed by running the following command in your terminal:

1git --version

If Git is not installed, you can download and install it from the official Git website (https://git-scm.com/).

Understanding git reflog

The git reflog command stands for "reference log." It provides a detailed log of all the branch references and HEAD movements in your Git repository. Essentially, it stores a chronological list of all the actions you've performed, such as commits, branch creations, checkouts, merges, rebases, and more.

Unlike Git's regular commit history (git log), which shows a linear view of commits, git reflog includes information about the entire repository, regardless of the branch or commit. This makes it incredibly useful for navigating through different states of your repository, even if you've lost or deleted branches.

Examples

Let's explore some common scenarios where git reflog can come to the rescue and demonstrate how it works.

1. Recovering a Deleted Branch

Imagine you accidentally delete a branch that contained significant work. Don't panic! git reflog can help you locate the missing branch and restore it. First, let's retrieve the branch reference using git reflog:

1git reflog

The command will display a list of recent commits and actions, along with their corresponding SHA references. Find the entry related to the deleted branch and note down its SHA reference. To recreate the branch, use the following command, replacing <SHA_REFERENCE> with the actual reference:

1git branch <branch_name> <SHA_REFERENCE>

Congratulations! You have successfully recovered the deleted branch using git reflog.

2. Undoing a Hard Reset

Sometimes, we perform a hard reset (git reset --hard) and later realize that it was a mistake. With git reflog, we can easily undo the hard reset and restore the previous state of our repository. Here's what you need to do:

1git reflog

Locate the entry before the hard reset action and copy its corresponding SHA reference. Then, execute the following command:

1git reset --hard <SHA_REFERENCE>

Voila! Your repository is back to the state before the hard reset.

3. Recovering a Lost Commit

Imagine you accidentally amend or rebase a commit and then realize that you need the original commit back. Fear not! git reflog can help you find the lost commit and restore it. Let's go through the steps:

1git reflog

Find the entry that represents the commit you want to recover and note down its SHA reference. Then, execute the following command:

1git cherry-pick <SHA_REFERENCE>

By using git cherry-pick, you can apply the lost commit onto your current branch and effectively recover it.