Git Commands
An overview of the most important Git commands
Git Commands featured image

git restore

The "restore" command helps to unstage or even discard uncommitted local changes.

On the one hand, the command can be used to undo the effects of git add and unstage changes you have previously added to the Staging Area.

On the other hand, the restore command can also be used to discard local changes in a file, thereby restoring its last committed state.

Important Options


The name of a file (or multiple files) you want to restore. Naming the file you want to restore can be as simple as providing the filename / path to a single file. But you can also provide multiple filenames (delimited by spaces) or even a wildcard pattern (e.g. *.html). Another option is to provide the . character, thereby restoring all files in the current directory.


Removes the file from the Staging Area, but leaves its actual modifications untouched. By default, the git restore command will discard any local, uncommitted changes in the corresponding files and thereby restore their last committed state. With the --staged option, however, the file will only be removed from the Staging Area - but its actual modifications will remain untouched.

--source <ref>

Restores a specific revision of the file. By default, the file will be restored to its last committed state (or simply be unstaged). The --source option, however, allows you to restore the file at a specific revision.


Allows you to select individual chunks to restore. Git steps through all of the individual chunks of changes in an interactive way and asks you, for each chunk, if you want to discard/unstage it.


Discarding / Unstaging Chunks or Even Lines of Changes

Using the Tower Git client, you can easily select the exact chunks & lines you want to stage, unstage, or even discard:

Usage Examples

To only unstage a certain file and thereby undo a previous git add, you need to provide the --staged flag:

$ git restore --staged index.html

You can of course also remove multiple files at once from the Staging Area:

$ git restore --staged *.css

If you want to discard uncommitted local changes in a file, simply omit the --staged flag. Keep in mind, however, that you cannot undo this!

$ git restore index.html

Another interesting use case is to restore a specific historic revision of a file:

$ git restore --source 7173808e index.html
$ git restore --source master~2 index.html

The first example will restore the file as it was in commit #7173808e, while the second one will restore it as it was "two commits before the current tip of the master branch".

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.