summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <junkio@cox.net>2006-06-20 02:47:14 -0700
committerLibravatar Junio C Hamano <junkio@cox.net>2006-06-20 22:21:11 -0700
commit4170af82328e50a75723cee084ae779e7a882b9d (patch)
treef232646ffc27f5f6e850e3fe75d4922f1d52933f
parentLog peer address when git-daemon called from inetd (diff)
downloadtgif-4170af82328e50a75723cee084ae779e7a882b9d.tar.xz
checkout -f: do not leave untracked working tree files.
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>
-rwxr-xr-xgit-checkout.sh3
1 files changed, 1 insertions, 2 deletions
diff --git a/git-checkout.sh b/git-checkout.sh
index 564117f006..77c2593809 100755
--- a/git-checkout.sh
+++ b/git-checkout.sh
@@ -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) || (