.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "GIT-CHECKOUT" 1 "" "" "" .SH NAME git-checkout \- Checkout and switch to a branch. .SH "SYNOPSIS" git\-checkout [\-f] [\-b ] [\-m] [] [...] .SH "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\&. .SH "OPTIONS" .TP \-f Force an re\-read of everything\&. .TP \-b Create a new branch and start it at \&. .TP \-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\&. .TP Name for the new branch\&. .TP Branch to checkout; may be any object ID that resolves to a commit\&. Defaults to HEAD\&. .SH "EXAMPLES" .TP 3 1. 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\&. .IP $ git checkout master $ git checkout master~2 Makefile $ rm \-f hello\&.c $ git checkout hello\&.c switch branch take out a file out of other commit 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: .IP $ git checkout \-\- hello\&.c.TP 2. After working in a wrong branch, switching to the correct branch you would want to is done with: .IP $ git checkout mytopicHowever, 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: .IP $ 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: .IP $ git checkout \-m mytopic Auto\-merging frotzAfter 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\&. .TP 3. When a merge conflict happens during switching branches with the \-m option, you would see something like this: .IP $ git checkout \-m mytopic Auto\-merging frotz merge: warning: conflicts during merge ERROR: Merge conflict in frotz fatal: merge program failedAt 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: .IP $ edit frotz $ git update\-index frotz.LP .SH "AUTHOR" Written by Linus Torvalds .SH "DOCUMENTATION" Documentation by Junio C Hamano and the git\-list \&. .SH "GIT" Part of the \fBgit\fR(7) suite