git/builtin
Junio C Hamano 0a1283bc39 checkout $tree $path: do not clobber local changes in $path not in $tree
Checking paths out of a tree is (currently) defined to do:

 - Grab the paths from the named tree that match the given pathspec,
   and add them to the index;

 - Check out the contents from the index for paths that match the
   pathspec to the working tree; and while at it

 - If the given pathspec did not match anything, suspect a typo from the
   command line and error out without updating the index nor the working
   tree.

Suppose that the branch you are working on has dir/myfile, and the "other"
branch has dir/other but not dir/myfile. Further imagine that you have
either modified or removed dir/myfile in your working tree, but you have
not run "git add dir/myfile" or "git rm dir/myfile" to tell Git about your
local change. Running

 $ git checkout other dir

would add dir/other to the index with the contents taken out of the
"other" branch, and check out the paths from the index that match the
pathspec "dir", namely, "dir/other" and "dir/myfile", overwriting your
local changes to "dir/myfile", even though "other" branch does not even
know about that file.

Fix it by updating the working tree only with the index entries that
was read from the "other" tree.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2011-09-30 10:33:15 -07:00
..
add.c Merge branch 'nd/maint-fix-add-typo-detection' (early part) 2010-12-08 11:25:52 -08:00
annotate.c
apply.c Merge branch 'fc/apply-p2-get-header-name' into maint 2010-12-09 10:36:36 -08:00
archive.c
bisect--helper.c
blame.c Merge branch 'jn/parse-options-extra' 2010-12-12 21:49:53 -08:00
branch.c builtin/branch.c: Use ALLOC_GROW instead of alloc_nr and xrealloc. 2010-12-19 10:43:53 -08:00
bundle.c
cat-file.c
check-attr.c
check-ref-format.c
checkout-index.c Merge branch 'jn/git-cmd-h-bypass-setup' 2010-12-12 21:49:50 -08:00
checkout.c checkout $tree $path: do not clobber local changes in $path not in $tree 2011-09-30 10:33:15 -07:00
clean.c Merge branch 'rs/opt-help-text' 2010-11-24 15:55:19 -08:00
clone.c clone: Add the --recurse-submodules option as alias for --recursive 2010-11-05 10:28:01 -07:00
commit-tree.c
commit.c Merge branch 'maint' 2011-01-12 21:26:51 -08:00
config.c
count-objects.c add description parameter to OPT__VERBOSE 2010-11-15 09:56:51 -08:00
describe.c Merge branch 'tf/commit-list-prefix' 2010-12-22 14:40:17 -08:00
diff-files.c
diff-index.c
diff-tree.c
diff.c diff,difftool: Don't use the {0,2} notation in usage strings 2010-11-05 10:05:31 -07:00
fast-export.c
fetch-pack.c commit: Add commit_list prefix in two function names. 2010-11-29 14:01:52 -08:00
fetch.c Merge branch 'jl/fetch-submodule-recursive' 2010-12-16 12:57:15 -08:00
fmt-merge-msg.c Change incorrect "remote branch" to "remote tracking branch" in C code 2010-11-03 09:20:47 -07:00
for-each-ref.c
fsck.c add description parameter to OPT__VERBOSE 2010-11-15 09:56:51 -08:00
gc.c Merge branch 'jn/git-cmd-h-bypass-setup' 2010-12-12 21:49:50 -08:00
grep.c thread-utils.h: simplify the inclusion 2010-12-10 12:58:06 -08:00
hash-object.c
help.c
index-pack.c
init-db.c Remove all logic from get_git_work_tree() 2010-12-22 14:34:24 -08:00
log.c Merge branch 'tc/format-patch-p' 2010-12-12 21:49:52 -08:00
ls-files.c Merge branch 'jn/git-cmd-h-bypass-setup' 2010-12-12 21:49:50 -08:00
ls-remote.c
ls-tree.c
mailinfo.c commit: helper methods to reduce redundant blocks of code 2010-11-04 13:53:34 -07:00
mailsplit.c
merge-base.c
merge-file.c Merge branch 'rs/opt-help-text' 2010-11-24 15:55:19 -08:00
merge-index.c
merge-ours.c
merge-recursive.c Merge branch 'jf/merge-ignore-ws' 2010-10-26 21:40:54 -07:00
merge-tree.c
merge.c Merge branch 'jn/git-cmd-h-bypass-setup' 2010-12-12 21:49:50 -08:00
mktag.c
mktree.c
mv.c add OPT__FORCE 2010-11-15 10:04:43 -08:00
name-rev.c
notes.c Merge branch 'jh/notes-merge' 2010-12-08 11:24:12 -08:00
pack-objects.c thread-utils.h: simplify the inclusion 2010-12-10 12:58:06 -08:00
pack-redundant.c
pack-refs.c
patch-id.c
prune-packed.c
prune.c add description parameter to OPT__DRY_RUN 2010-11-15 09:57:37 -08:00
push.c
read-tree.c add description parameter to OPT__VERBOSE 2010-11-15 09:56:51 -08:00
receive-pack.c
reflog.c
remote-ext.c remote-ext: do not segfault for blank lines 2011-01-18 10:18:25 -08:00
remote-fd.c remote-fd/ext: finishing touches after code review 2010-11-19 11:04:20 -08:00
remote.c Merge branch 'rs/opt-help-text' 2010-11-24 15:55:19 -08:00
replace.c
rerere.c
reset.c Describe various forms of "be quiet" using OPT__QUIET 2010-11-15 10:04:56 -08:00
rev-list.c Merge branch 'jk/maint-rev-list-nul' into maint 2010-11-24 12:46:32 -08:00
rev-parse.c
revert.c Merge branch 'jn/cherry-pick-refresh-index' into maint 2010-12-09 10:36:51 -08:00
rm.c builtin/rm.c: Use ALLOC_GROW instead of alloc_nr and xrealloc. 2010-12-19 10:44:06 -08:00
send-pack.c Merge branch 'jk/push-progress' 2010-11-17 15:01:00 -08:00
shortlog.c parse-options: Don't call parse_options_check() so much 2010-12-06 16:51:36 -08:00
show-branch.c commit: Add commit_list prefix in two function names. 2010-11-29 14:01:52 -08:00
show-ref.c Describe various forms of "be quiet" using OPT__QUIET 2010-11-15 10:04:56 -08:00
stripspace.c
symbolic-ref.c Describe various forms of "be quiet" using OPT__QUIET 2010-11-15 10:04:56 -08:00
tag.c Merge branch 'mg/maint-tag-rfc1991' 2010-12-08 11:24:13 -08:00
tar-tree.c
unpack-file.c
unpack-objects.c
update-index.c Merge branch 'jn/parse-options-extra' 2010-12-12 21:49:53 -08:00
update-ref.c
update-server-info.c add OPT__FORCE 2010-11-15 10:04:43 -08:00
upload-archive.c
var.c
verify-pack.c
verify-tag.c Merge branch 'mg/maint-tag-rfc1991' 2010-12-08 11:24:13 -08:00
write-tree.c