Allow git-checkout when on a non-existant branch.
I've seen some users get into situtations where their HEAD symbolic-ref is pointing at a non-existant ref. (Sometimes this happens during clone when the remote repository lacks a 'master' branch.) If this happens the user is unable to use git-checkout to switch branches as there is no prior commit to merge from. So instead of giving the user low-level errors about how HEAD can't be resolved and how not a single revision was given change the type of checkout to be a force and go through with the user's request anyway. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
4a0641b7cf
commit
5a03e7f253
@ -4,8 +4,8 @@ USAGE='[-f] [-b <new_branch>] [-m] [<branch>] [<paths>...]'
|
||||
SUBDIRECTORY_OK=Sometimes
|
||||
. git-sh-setup
|
||||
|
||||
old=$(git-rev-parse HEAD)
|
||||
old_name=HEAD
|
||||
old=$(git-rev-parse --verify $old_name 2>/dev/null)
|
||||
new=
|
||||
new_name=
|
||||
force=
|
||||
@ -139,6 +139,13 @@ fi
|
||||
die "git checkout: to checkout the requested commit you need to specify
|
||||
a name for a new branch which is created and switched to"
|
||||
|
||||
if [ "X$old" = X ]
|
||||
then
|
||||
echo "warning: You do not appear to currently be on a branch." >&2
|
||||
echo "warning: Forcing checkout of $new_name." >&2
|
||||
force=1
|
||||
fi
|
||||
|
||||
if [ "$force" ]
|
||||
then
|
||||
git-read-tree --reset -u $new
|
||||
|
@ -31,6 +31,15 @@ test_expect_success setup '
|
||||
git checkout master
|
||||
'
|
||||
|
||||
test_expect_success "checkout from non-existing branch" '
|
||||
|
||||
git checkout -b delete-me master &&
|
||||
rm .git/refs/heads/delete-me &&
|
||||
test refs/heads/delete-me = "$(git symbolic-ref HEAD)" &&
|
||||
git checkout master &&
|
||||
test refs/heads/master = "$(git symbolic-ref HEAD)"
|
||||
'
|
||||
|
||||
test_expect_success "checkout with dirty tree without -m" '
|
||||
|
||||
fill 0 1 2 3 4 5 >one &&
|
||||
|
Loading…
Reference in New Issue
Block a user