📝
This post is part of my “Shorts” series, where each post is concise and hyper-focused on a single concept.

In a previous post, we learned about the git rm command which helps you un-stage a file, and delete any modifications made. However, the git rm command is essentially meant to “delete” files, not undo them.

Git offers a dedicated command to undo modifications, or undo staging of a file. In this post, I will introduce you to git restore which can be used to perform both these tasks.

ℹ️
Git introduced git restore in version 2.23.0. Earlier, the commands git reset and git checkout were used for the same purposes. But, git restore was introduced as a more dedicated tool for these specific purposes.

I will not cover the details of the git restore command since Git is very helpful with these commands, and I think it is best for you to explore them yourself. When you run git status, Git exactly tells you the commands to un-stage or undo any unstaged modifications. This is how the output of git status looks like. Notice the commands mentioned for undo-ing.

On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	renamed:    README.md -> README

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   ammend.md

Fair warning

If you use git restore <file> to undo any unstaged modifications to a file, then you will lose all those changes forever. Git only helps you recover changes that have ever been committed.

If you are feeling uneasy about losing those modifications forever, but still want to undo the modifications, a better way is to use git stash. I will explore this command in a later post.

Further exploration

As always, I encourage you to explore the command further using man git-restore.