Frequently asked questions around Git and Version Control.
Git FAQ featured image

How to Discard Changes in Git

No matter how experienced you are as a programmer, not all of your code will always work at the first try. Luckily, Git allows you to discard and undo any of your changes, providing a safety net for your work.

In this short article, we'll look at some of the many ways how you can discard changes in Git.

The Git Cheat Sheet

No need to remember all those commands and parameters: get our popular "Git Cheat Sheet" - for free!

Discarding Local Changes in a File

Changes that haven't been committed to the local repository are called "local" changes in Git. They exist in your Working Copy, but you haven't wrapped them in a commit, yet.

If you want to discard this type of changes, you can use the git restore command:

git restore index.html

This will undo all uncommitted local changes in the specified file. Please be careful because you cannot get these changes back once you've discarded them!

In case you are using the Tower Git client, you can discard local changes in a file simply from its contextual menu - or even discard only parts of your changes, while keeping the rest:

Although it's not possible in Git, Tower allows you to undo any wrongfully discarded changes with a simple shortcut: CMD+Z (or CTRL+Z on Windows)!

Discarding All Local Changes

If you want to undo all of your current changes, you can use the git restore command with the "." parameter (instead of specifying a file path):

$ git restore .

If, additionally, you have untracked (= new) files in your Working Copy and want to get rid of those, too, then the git clean command is your friend:

$ git clean -f

Again: please be careful with these commands! Once you've discarded your local changes, you won't be able to get them back!

Saving Changes on the Stash

Sometimes, you won't be 100% sure if you really don't need your local changes anymore. That's when - instead of discarding them - you can choose to save them temporarily:

$ git stash --include-untracked

Running this command will result in a clean Working Copy, but the changes are saved on Git's "Stash" so you can restore them at a later point if you need them:

$ git stash pop

The "pop" option will reapply the last saved state and, at the same time, delete and clean it from the Stash.

In case you are using the Tower Git client, saving to and restoring from the Stash can be performed right from the toolbar:

Learn More

About Us

As the makers of Tower, the best Git client for Mac and Windows, we help over 100,000 users in companies like Apple, Google, Amazon, Twitter, and Ebay get the most out of Git.

Just like with Tower, our mission with this platform is to help people become better professionals.

That's why we provide our guides, videos, and cheat sheets (about version control with Git and lots of other topics) for free.