Skip to content

Commit

Permalink
checkout -f: do not leave untracked working tree files.
Browse files Browse the repository at this point in the history
Earlier we did not consider untracked working tree files
"precious", but we have always considered them fair game to
clobber.  These days, branch switching by read-tree is more
careful and tries to protect untracked working tree files.  This
caused the following workflow to stop working:

	git checkout one-branch-with-file-F
	git checkout -f another-without-file-F
	git pull . one-branch-with-file-F

Because the second checkout leaves F from the previous state as
untracked file in the working tree, the merge would fail, trying
to protect F from being clobbered.

This changes "git checkout -f" to remove working tree files that
are known to git in the switched-from state but do not exist in
the switched-to state, borrowing the same logic from "reset --hard".

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Jun 21, 2006
1 parent 5b276ee commit 4170af8
Showing 1 changed file with 1 addition and 2 deletions.
3 changes: 1 addition & 2 deletions git-checkout.sh
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,7 @@ fi

if [ "$force" ]
then
git-read-tree --reset $new &&
git-checkout-index -q -f -u -a
git-read-tree --reset -u $new
else
git-update-index --refresh >/dev/null
merge_error=$(git-read-tree -m -u $old $new 2>&1) || (
Expand Down

0 comments on commit 4170af8

Please sign in to comment.