path: root/Documentation
diff options
authorJunio C Hamano <>2005-10-18 08:29:27 (GMT)
committerJunio C Hamano <>2005-10-18 08:29:27 (GMT)
commit4aaa702794447d9b281dd22fe532fd61e02434e1 (patch)
treeaa0a562dc1d28c6b4d6bc3f0ece8b96ab74ddb84 /Documentation
parent4bfe1199eabb41eb1f1d67f4ee24df028eb21300 (diff)
git-checkout: revert specific paths to either index or a given tree-ish.
When extra paths arguments are given, git-checkout reverts only those paths to either the version recorded in the index or the version recorded in the given tree-ish. This has been on the TODO list for quite a while. Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'Documentation')
1 files changed, 39 insertions, 3 deletions
diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt
index f753c14..b7bb1b4 100644
--- a/Documentation/git-checkout.txt
+++ b/Documentation/git-checkout.txt
@@ -7,12 +7,24 @@ git-checkout - Checkout and switch to a branch.
-'git-checkout' [-f] [-b <new_branch>] [<branch>]
+'git-checkout' [-f] [-b <new_branch>] [<branch>] [<paths>...]
-Updates the index and working tree to reflect the specified branch,
-<branch>. Updates HEAD to be <branch> or, if specified, <new_branch>.
+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.
@@ -29,6 +41,30 @@ OPTIONS
Branch to checkout; may be any object ID that resolves to a
commit. Defaults to HEAD.
+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
+$ git checkout master~2 Makefile
+$ rm -f hello.c
+$ git checkout hello.c
+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
Written by Linus Torvalds <>