Altcademy - a Forbes magazine logo Best Coding Bootcamp 2023

What is Git Reset?

When you are learning to code, you will likely come across a version control system called Git. Git is an immensely popular tool that helps programmers keep track of changes made to their code over time, collaborate with others, and manage different versions of their projects. In this article, we will focus on one specific command in Git called git reset. We will discuss what the command does, why it is useful, and how to use it in different scenarios.

What is Git Reset?

Git reset is a command that allows you to undo changes in your Git repository. It can help you to go back in time and undo any unwanted changes you have made to your code. This function is particularly useful when you have made a mistake or want to revert to a previous version of your code.

To better understand the concept of Git reset, let's use an analogy. Imagine you are writing a story, and you have written several chapters. You realize that the last few chapters are not up to your expectations and want to go back to a point where you think your story was better. Git reset is like an eraser that helps you erase those unwanted chapters and start over from the point where you think your story was better.

Git Reset in Action

Now that we have a basic understanding of what Git reset does, let's dive into some actual code examples to see how it works.

First, let's create a new Git repository and add some files to it. Open a terminal (or Git Bash on Windows), navigate to the desired directory, and run the following commands:

$ git init
$ echo "Chapter 1: Once upon a time..." > story.txt
$ git add story.txt
$ git commit -m "Add chapter 1"

Now, we have created a new Git repository and added a file called story.txt with the content "Chapter 1: Once upon a time...". We have also committed the changes with the commit message "Add chapter 1".

Next, let's add a couple more chapters to our story:

$ echo "Chapter 2: The journey begins..." >> story.txt
$ git add story.txt
$ git commit -m "Add chapter 2"

$ echo "Chapter 3: A twist in the tale..." >> story.txt
$ git add story.txt
$ git commit -m "Add chapter 3"

Now, we have three commits in our Git repository, each adding a new chapter to the story.

To view the commit history, you can use the git log command:

$ git log

You will see output similar to this:

commit a7f8900e6d41d6af2f5e5e0b9c6d8d6b270c6a0c (HEAD -> master)
Author: Your Name <your.email@example.com>
Date:   Mon Oct 11 10:30:00 2021 +0000

    Add chapter 3

commit 4b47f4ca7df9d9f8a7f1e36e3d3d1b87a8a7a4a6
Author: Your Name <your.email@example.com>
Date:   Mon Oct 11 10:20:00 2021 +0000

    Add chapter 2

commit 9d49b8c2e2e1be0c2f4a4d927c0d4f4f4e9c9fc0
Author: Your Name <your.email@example.com>
Date:   Mon Oct 11 10:10:00 2021 +0000

    Add chapter 1

Let's say you are not happy with the third chapter and want to remove it from your story. This is where git reset comes in handy.

Soft Reset

There are three modes of Git reset, and the first one is called a "soft" reset. A soft reset moves the HEAD pointer (which indicates the current commit) to the specified commit, but it does not change the content of the files or the index (the staging area).

To perform a soft reset, use the git reset command with the --soft option, followed by the commit hash or reference:

$ git reset --soft 4b47f4ca7df9d9f8a7f1e36e3d3d1b87a8a7a4a6

Now, if you run git log, you will see that the third commit is no longer in the history. However, the changes made in the third commit are still present in the working directory and have been staged (added to the index).

You can now modify the third chapter as needed and create a new commit with the updated content.

Mixed Reset

The second mode of Git reset is called a "mixed" reset. This is the default mode if you do not specify any option with the git reset command. A mixed reset moves the HEAD pointer and updates the index, but it does not change the content of the files in the working directory.

To perform a mixed reset, use the git reset command without any options or with the --mixed option, followed by the commit hash or reference:

$ git reset 4b47f4ca7df9d9f8a7f1e36e3d3d1b87a8a7a4a6

After a mixed reset, the changes made in the third commit are still present in the working directory, but they have been unstaged (removed from the index). You can now modify the third chapter and stage the changes before creating a new commit.

Hard Reset

The third and most destructive mode of Git reset is called a "hard" reset. A hard reset moves the HEAD pointer, updates the index, and changes the content of the files in the working directory to match the specified commit.

To perform a hard reset, use the git reset command with the --hard option, followed by the commit hash or reference:

$ git reset --hard 4b47f4ca7df9d9f8a7f1e36e3d3d1b87a8a7a4a6

After a hard reset, the third commit is removed from the history, and the changes made in that commit are no longer present in the working directory or the index. It is like erasing the chapter entirely from your story.

Note: Be careful when using a hard reset, as it can lead to data loss if you have not backed up your changes elsewhere.

Conclusion

Git reset is a powerful command that allows you to undo changes in your Git repository and revert to a previous state. With its soft, mixed, and hard modes, you can choose the level of reset that best suits your needs.

When working with Git reset, always remember to use caution, especially with hard resets, to avoid losing valuable work. As you continue to learn programming and use Git for version control, mastering commands like git reset will help you manage your projects more effectively and efficiently.