Let’s take a look at the main purpose of and common uses for the
git checkout command.
First, here is a quick summary of the whole article (if you get the summary, reading the rest is optional):
# checkout out a branch (i.e. make working directory look like the # latest commit in that branch) git checkout <branch> # replace a file in the working directory with the version of the file # in another commit git checkout <from commit> someFile.txt # replace a file in the working directory with the version of the file # in the index (i.e. remove local changes to file) # notice: you basically leave out the commit identifier git checkout someFile.txt # if you have a merge conflict, choose your version of a certain file git checkout --ours someFile.txt # NOTE: In any of the above examples, you can use globs to select # multiple files, so for example, to revert all .cpp files: git checkout *.cpp
The overarching purpose of
git checkout is to modify files in your working directory.
There are two common uses for git checkout:
- To switch branches.
- To replace certain files in the working directory with files from:
- another commit
- the index
- a certain party during a merge conflict
To switch branches, just do:
git checkout <name of branch>
This will make your working directory look like the specified branch and makes HEAD point to the latest commit in the new branch (recall HEAD is basically a pointer to the commit that you have checked out).
Replace a file in the working directory
fileA.ext in the working directory with
fileA.ext from a specific commit, do:
git checkout ca82a6dff8 fileA.ext
The long word with the random letters and numbers is the hash of the commit from which you want to grab
To replace a bunch of files, use globs (e.g.
*.cpp to replace all .cpp files).
git checkout ca82a6dff8 *.cpp
To grab the file from the index instead of a specific commit, just leave out the commit hash:
git checkout fileA.ext
Grabbing the file from the index basically reverts the local changes on the file. Of course, you know what the index is right? Yup that’s right! It’s basically the commit you last checked out (so the current branch) plus any modifications that you added to the staging area.
If you have attempted a merge and there are merge conflicts, you can pick certain files in the working directory to be
This will choose our version of the conflicted file
git checkout --ours fileA.ext
And this will choose theirs:
git checkout --theirs fileA.ext
As a bonus (since I’m a nice young man and I like to give out free stuff :P), if you quickly want to create a new branch stemming from your current commit (branch) and then checkout (i.e. switch to) the new branch, do:
git checkout -b <name of new branch>