https://github.com/git/git
Raw File
Tip revision: e1a0c8b1483b38d32d3870408e03a6c1b340aa15 authored by Junio C Hamano on 02 March 2006, 01:06:12 UTC
Merge branch 'lt/fix-apply' into maint
Tip revision: e1a0c8b
git-checkout.txt
git-checkout(1)
===============

NAME
----
git-checkout - Checkout and switch to a branch.

SYNOPSIS
--------
'git-checkout' [-f] [-b <new_branch>] [-m] [<branch>] [<paths>...]

DESCRIPTION
-----------

When <paths> are not given, this command switches branches, by
updating the index and working tree to reflect the specified
branch, <branch>, and updating HEAD to be <branch> or, if
specified, <new_branch>.

When <paths> 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.  <branch> 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 <branch>.

-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`.

<new_branch>::
	Name for the new branch.

<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 <torvalds@osdl.org>

Documentation
--------------
Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.

GIT
---
Part of the gitlink:git[7] suite

back to top