Undo changes to a file or directory in the working copy.
git checkout -- file.txt
Used over all file paths, recursively from the current directory, it will undo all changes in the working copy.
git checkout -- .
To only undo parts of the changes use
--patch. You will be asked, for each change, if it should be undone or not.
git checkout --patch -- dir
To undo changes added to the index.
git reset --hard
--hard flag this will do a soft reset.
With local commits that you have yet to push to a remote you can also do a soft reset. You can thus rework the files and then the commits.
git reset HEAD~2
The above example would unwind your last two commits and return the files to your working copy. You could then make further changes and new commits.
Beware: All of these operations, apart from soft resets, will permanently delete your changes. For a safer option, use
git stash -p or
git stash, respectively. You can later undo with
stash pop or delete forever with