Git

What is the Difference Between “Git Reset” and “Git Reset –Hard”?

Git is known to be the most popular version control system. The concept of version control becomes significant whenever we talk about teamwork and collaboration. For example, if multiple employees are working on a single project, then data consistency is a major issue that must be addressed. You cannot simply assume that a change made by one of the employees will automatically be notified to all other employees working on that project. Rather, there should be a proper mechanism through which data consistency can be ensured.

Now, if we talk about version control software or system, then as the name implies, its main job is to keep track of your version history. It means that all the changes made to any particular file will be considered as separate versions of that file. A version control software or system will essentially allow you to revert to an older version at any time you want as per your needs. Apart from this, a version control system like Git also ensures that the changes committed to any file have equal visibility to all the users who have access to that file so that they might not accidentally start working on an older version or a copy of that file.

Just like any other version control system, Git also allows us to perform certain operations on the files that we upload on it. Moreover, at any point in time, it also provides you with the ability to undo the changes that you have made to any particular file by resetting it. Today, we aim to unravel the difference between “git reset” and “git reset –hard” operations.

Understanding the difference between “git reset” and “git reset –hard”

Before understanding the difference between “git reset” and “git reset –hard” operations, we must be aware of some of the most important terminologies used with this version control system. A “Head” in Git is defined as a pointer, whose job is to point to the latest commit or change that you have made to a file. An “Index” is defined as a set of all the files that have been recently committed and are supposed to be committed next. Lastly, a “Working Directory” refers to the set of files from the whole file system on which you are working currently.

After learning about these terminologies, it will now be very easy for you to understand the difference between “git reset” and “git reset –hard” operations. As we already stated, there are multiple options that you can perform on a file that is uploaded on Git, similarly, “git reset” is defined as the default operation with which you can undo the last commit or change that you have made to the current file. Now, this operation comes with five different options, namely: hard, soft, merged, mixed, and keep.

Depending upon the option that you have selected or used with your “git reset” command, you are going to get a different “undo” level. The “git reset –hard” operation is considered the most effective operation if you wish to entirely get rid of your last commit. It means that when you perform this operation, the head of your file will change, i.e., it will no longer be pointing to your last commit. Not only this, but it will also clear out your last commit from your index and even change your current working directory.

On the other hand, if you use any other option with the “git reset” command such as “soft”, then doing this will only change the position of your head. Other than that, it will not bring about any changes to your index, nor will it change your current working directory. So, in short, we can say that “git reset” is a command, whereas “git reset –hard” is its variation that is used when you want to wipe out all the traces of your last commit.

Conclusion

By going through this detailed explanation on “git reset” and “git reset –hard” operations, you will easily be able to differentiate them from now on. Also, this article will guide you on which option you need to use with the “git reset” command depending upon your particular requirements.

About the author

Karim Buzdar

Karim Buzdar holds a degree in telecommunication engineering and holds several sysadmin certifications. As an IT engineer and technical author, he writes for various web sites. He blogs at LinuxWays.