What is Git Reflog: A Comprehensive Guide to Git's Reflog Command

blog_auth Blog Author

StarAgile

published Published

Oct 15, 2024

views Views

8,032

readTime Read Time

16 mins

Tabel of the content

Git Reflog: Comprehensive Guide

Git reflog is a powerful tool, but it is only valuable to those who know how to use it. Before attempting to use the reflog command, you should thoroughly understand its subcommands and what it is meant to perform. In this article, we will try to understand everything about git reflog.  

Git reflog is a very useful tool for developers. Reference logs, sometimes known as "reflogs" keep track of when the tips of branches and other references in the local repository are modified. Reflogs can be used in various Git operations to specify the previous value of a reference. 

When using Git as a version control system, handling commits and branches is at the heart of a developer's work. Git's reflog command can help meet that demand.  It performs this by navigating all of the changes tracked by Git as they occurred and saving references for later use.

What Is Git Reflog?

Git uses the git reflog command to record changes made to the tips of branches. It allows you to go back to commits that are not linked to any branch or tag. The reflog, which is created after rewriting history, includes information about the previous state of branches and if necessary, it allows you to return to that state. The reflog is only for local use and is not part of the repository. It is also excluded from pushes, fetches, and clones.

In simplified words, git reflogs are reference logs. The records kept by the git branch and HEAD changes in your project's local repository. These reference logs are kept in your local repository as files, where each new line represents a change in the reference pointer. Each reference file's line defines the sort of change that has been performed. You can interact with these records by using the git reflog command. 

In general, git reflog is used as follows:

git reflog

git reflog <subcommand> <options>

The git reflog can be found in the “.git” directory under the following paths:

.git/logs/refs/heads/

.git/logs/HEAD

.git/logs/refs/stash #if stash has been utilised

Master Devops Course in Hyderabad with StarAgile – Enroll Now to Boost Your Career with Hands-On Training and Industry-Recognized Certification!

Git and GitHub

If you are a developer, you already know what Git and GitHub are. For the people who are not familiar with these two, let’s check what exactly they are. 

Git is a source code management tool used in DevOps, one of the best DevOps tools. It is a free and open-source version control system. Git is used to manage small to extremely big projects efficiently. Git allows several developers to collaborate on non-linear development by recording changes in the source code.

GitHub is a cloud-based hosting website that manages Git repositories and allows you to access them from anywhere. In other terms, it is a Git-based Internet hosting service for software development and version control. GitHub also makes it incredibly simple to collaborate on code strings in order to fine-tune and perfect even the smallest bits of a program. GitHub allows you to collaborate and work on projects with people from all around the world.

Also, read Git vs GitHub for a better understanding

Git Reflog Subcommands

The git reflog subcommands that are available for use is given below:

1. Show

git reflog show

"show" is git reflog's default subcommand. This displays the log associated with the particular reference passed. If no explicit reference is supplied to it, this subcommand will display the log of the “HEAD”. The “show” subcommand is nearly identical to the git log command. It even accepts the same arguments.

Also Read: Devops VS CI CD

2. Expire

git reflog expire <ref/time>

This subcommand is used to clear out old reflog entries. In other words, the “expire” is a reflog subcommand for removing reflog entries that are no longer valuable to your project. The syntax takes either time or references. They are older than the time indicated in your project's configuration or the time specified in the command.

3. Delete

git reflog delete <ref>

This subcommand enables the removal of reflog entries one at a time. Bypassing the corresponding git revision, this command will erase any single entry from the reflog. The “delete” subcommand can only target exact entries. Where "expire" will select reflog records to remove intuitively as needed.

Related Article: Git bisect

4. Exists

git reflog exists <ref>

We can easily determine whether or not a reference has its own reflog by using the “exists” subcommand.

Also Read: DevOps Automation

Git Reflog: Restore A Commit

If you make any changes to a branch, you may expect it to be given a reference log. This log  can then be searched up and reverted to the change. This method allows you to revert to any commit, even ones that do not have a reference from an existing branch or tag. This is especially beneficial if you've changed history in your local repository and mistakenly deleted the commits you meant to save.

git reflog

In order to restore a commit, we should focus on the hash ID at the beginning of each line for each reflog record returned by the previous command. After you've discovered the commit you want to restore, you can choose its hash ID. Now proceed with running the given command.

git reset --hard YOUR-HASH-ID 

Alternatively, use the given command to create a totally new branch to hold the desired state of your repository. 

git branch YOUR-NEW-BRANCH-NAME YOUR-HASH-ID

Boost Your Skills – Learn about emerging DevOps Trends and enhance your development and operations processes today!

DevOps Certification

Training Course

100% Placement Guarantee

View course
 

Git Reflog: Restore A Deleted Branch

When working on a branch other than the master, it's usual practice to delete it after it's been merged into the master branch. When a branch is destroyed in this manner, the only method to view the commits connected with it is to browse the reflog. 

git reflog

We have to browse the reflog to find the log of the deleted branch. Once the branch information is available then we can reinstate the deleted branch using the given command. And a new branch will be created. 

git checkout -b YOUR-NEW-BRANCH-NAME YOUR-HEAD-INFO

Once we delete a branch and run the “git log” command, we can see that there will be no trace of the deleted branch. Only after running the “git reflog” command we will be able to review the contents and reinstate the deleted branch.

Get to know how to use Git Branching Strategy

What Is Git Log?

Git log is a utility tool that allows you to check and read the history of everything that has happened to a repository. To make history more particular, multiple settings can be utilised with a git log. The git log is a record of commits. 

Also read: The guide to Git Bisect for Beginners

Git Reflog vs Git Log

People often misunderstand git log and git reflog. These two identically titled commands allow developers to examine the repository's commit history via the command line.

The git log is a public record of the commit history of the repository, whereas the reflog is private. This is the key difference between git log and reflog. After a fetch, push, or pull, the git log is duplicated as part of the git repository. In that situation, the git reflog is absent.

Unless any parameters are provided to the command, the git log only outputs from the current branch by default. However, git reflog will show you the available history of the git HEAD ref. Deleted commits and branches are ignored from the git log output since it focuses on the current branch history. Reflog, on the other hand, will always keep track of these deleted references.

The git reflog is a file in “.gitlogsrefsheads” that keeps track of local commits for a single branch. It excludes any commits that may have been stripped away by git garbage collection operations. The git log gives a historical path of commits for a branch that starts with the latest commit and ends with the branch's very first commit.

Prepare yourself for Git Interview with Git Interview Questions

Advantages And Disadvantages Of Git Reflog

Git reflog is an isolated store used to maintain an accurate running history of modifications made to your repository's HEAD pointer. It is unaffected by destructive operations like “git reset —hard”. Also, git reflog can be used to recover lost commits or branches in the repository.

While "git reflog" is quite useful for recovering lost branches and commits, it has a few drawbacks. Because reference logs are saved locally, they cannot be pushed or fetched from a remote repository. They normally expire or be erased after a certain length of time to conserve disc space. By default, after 90 days the git reflog will be erased. This can be changed using Git's garbage collection configuration. The reflog cannot be used to retrieve data for Git objects that have been removed due to garbage collection.

Summary

The git reflog is a must-know feature for anyone who expects to use Git as their version control system tool. Check out our DevOps course if you want to learn more about how Git works. The DevOps online training explores Git's code in a simple and understandable manner. 

We hope this article helped you to understand git reflogs and their uses. Check out StarAgile Consulting India | Training and Certifications for more similar content.  

 

Share the blog
readTimereadTimereadTime
Name*
Email Id*
Phone Number*

Keep reading about

Card image cap
DevOps
reviews5395
Top 10 DevOps programming languages in 20...
calender18 May 2020calender20 mins
Card image cap
DevOps
reviews4550
Top 9 Devops Engineer Skills
calender18 May 2020calender20 mins
Card image cap
DevOps
reviews4773
Best DevOps Tools in 2024
calender18 May 2020calender20 mins

Find DevOps Training in Top Cities

We have
successfully served:

3,00,000+

professionals trained

25+

countries

100%

sucess rate

3,500+

>4.5 ratings in Google

Drop a Query

Name
Email Id*
Phone Number*
City
Enquiry for*
Enter Your Query*