How can I get rid of all the changes in all the files of my repository?
Say I am in a branch and I did some changes. git status
returns a set of files in the "Changes not staged for commit" and I notice I would like to get rid of all of these changes in all the files. How can I do this with a single command?
I know I can do the following to checkout just one file:
git checkout -- <file>
I noticed that git checkout --
alone returns the list of all uncommited files. However, I cannot find a way to checkout all of them, something like git checkout --all
.
I checked man git checkout
and could not find anything. Also I saw Git: Checkout all files except one and tried git checkout .
and did not work either.
Would I have to do it programmatically, by looping through the git checkout --
output?
If you are at the root of your working directory, you can do git checkout -- .
to check-out all files in the current HEAD and replace your local files.
You can also do git reset --hard
to reset your working directory and replace all changes (including the index).
Other way which I found useful is:
git checkout <wildcard>
Example:
git checkout *.html
More generally:
git checkout <branch> <filename/wildcard>
git checkout \*
or git checkout '*'
.
git checkout <branch> <filename/wildcard>
will move head
to branch
but put the files in the second argument to the local files state instead of the branch state?
git checkout *.html
This wont work for subdirectories on most setups.
git checkout *
will checkout recursively, but the same cannot be said for a linux machine running BASH.
Of course you could use hard reset:
git reset --hard
Additionally I'm using simple method allowing to specify the pattern:
git checkout `git ls-files -m | grep "some pattern"`
So here "some pattern" could be the folder or file name or file extension.
If you want to checkout all the files 'anywhere'
git checkout -- $(git rev-parse --show-toplevel)
If you are in base directory location of your tracked files then git checkout . will works otherwise it won't work
Success story sharing
git checkout -- .
will only reset the changes to the state of the index. So if you already have added files to the index, that’s what it will reset to. On the other handgit reset --hard
will also throw away the index, so for example if you have untracked files added to the index (to start tracking them), they will also be removed.git checkout
also allows you to only restore the working directory partially by passing a more specific path which can be very useful.git checkout --force
,git reset --hard