git-checkout(1) =============== NAME ---- git-checkout - Checkout and switch to a branch. SYNOPSIS -------- 'git-checkout' [-f] [-b ] [-m] [] [...] DESCRIPTION ----------- When are not given, this command switches branches, by updating the index and working tree to reflect the specified branch, , and updating HEAD to be or, if specified, . When are given, this command does *not* switch branches. It updates the named paths in the working tree from the index file (i.e. it runs `git-checkout-index -f -u`). In this case, `-f` and `-b` options are meaningless and giving either of them results in an error. argument can be used to specify a specific tree-ish to update the index for the given paths before updating the working tree. OPTIONS ------- -f:: Force an re-read of everything. -b:: Create a new branch and start it at . -m:: If you have local modifications to a file that is different between the current branch and the branch you are switching to, the command refuses to switch branches, to preserve your modifications in context. With this option, a three-way merge between the current branch, your working tree contents, and the new branch is done, and you will be on the new branch. + When a merge conflict happens, the index entries for conflicting paths are left unmerged, and you need to resolve the conflicts and mark the resolved paths with `git update-index`. :: Name for the new branch. :: Branch to checkout; may be any object ID that resolves to a commit. Defaults to HEAD. EXAMPLES -------- . The following sequence checks out the `master` branch, reverts the `Makefile` to two revisions back, deletes hello.c by mistake, and gets it back from the index. + ------------ $ git checkout master <1> $ git checkout master~2 Makefile <2> $ rm -f hello.c $ git checkout hello.c <3> <1> switch branch <2> take out a file out of other commit <3> or "git checkout -- hello.c", as in the next example. ------------ + If you have an unfortunate branch that is named `hello.c`, the last step above would be confused as an instruction to switch to that branch. You should instead write: + ------------ $ git checkout -- hello.c ------------ . After working in a wrong branch, switching to the correct branch you would want to is done with: + ------------ $ git checkout mytopic ------------ + However, your "wrong" branch and correct "mytopic" branch may differ in files that you have locally modified, in which case, the above checkout would fail like this: + ------------ $ git checkout mytopic fatal: Entry 'frotz' not uptodate. Cannot merge. ------------ + You can give the `-m` flag to the command, which would try a three-way merge: + ------------ $ git checkout -m mytopic Auto-merging frotz ------------ + After this three-way merge, the local modifications are _not_ registered in your index file, so `git diff` would show you what changes you made since the tip of the new branch. . When a merge conflict happens during switching branches with the `-m` option, you would see something like this: + ------------ $ git checkout -m mytopic Auto-merging frotz merge: warning: conflicts during merge ERROR: Merge conflict in frotz fatal: merge program failed ------------ + At this point, `git diff` shows the changes cleanly merged as in the previous example, as well as the changes in the conflicted files. Edit and resolve the conflict and mark it resolved with `git update-index` as usual: + ------------ $ edit frotz $ git update-index frotz ------------ Author ------ Written by Linus Torvalds Documentation -------------- Documentation by Junio C Hamano and the git-list . GIT --- Part of the gitlink:git[7] suite