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.
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.
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:
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: