Browse Source

Merge branch 'jc/checkout' (early part)

* 'jc/checkout' (early part):
  checkout: allow detaching to HEAD even when switching to the tip of a branch
maint
Junio C Hamano 18 years ago
parent
commit
b7108a16a6
  1. 4
      git-checkout.sh
  2. 63
      t/t7201-co.sh

4
git-checkout.sh

@ -170,7 +170,7 @@ describe_detached_head () {
} }
} }


if test -z "$branch$newbranch" && test "$new" != "$old" if test -z "$branch$newbranch" && test "$new_name" != "$old_name"
then then
detached="$new" detached="$new"
if test -n "$oldbranch" && test -z "$quiet" if test -n "$oldbranch" && test -z "$quiet"
@ -180,7 +180,7 @@ If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example: (now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>" git checkout -b <new_branch_name>"
fi fi
elif test -z "$oldbranch" elif test -z "$oldbranch" && test "$new" != "$old"
then then
describe_detached_head 'Previous HEAD position was' "$old" describe_detached_head 'Previous HEAD position was' "$old"
fi fi

63
t/t7201-co.sh

@ -3,7 +3,20 @@
# Copyright (c) 2006 Junio C Hamano # Copyright (c) 2006 Junio C Hamano
# #


test_description='git-checkout tests.' test_description='git-checkout tests.

Creates master, forks renamer and side branches from it.
Test switching across them.

! [master] Initial A one, A two
* [renamer] Renamer R one->uno, M two
! [side] Side M one, D two, A three
---
+ [side] Side M one, D two, A three
* [renamer] Renamer R one->uno, M two
+*+ [master] Initial A one, A two

'


. ./test-lib.sh . ./test-lib.sh


@ -129,4 +142,52 @@ test_expect_success 'checkout -m with merge conflict' '
! test -s current ! test -s current
' '


test_expect_success 'checkout to detach HEAD' '

git checkout -f renamer && git clean &&
git checkout renamer^ &&
H=$(git rev-parse --verify HEAD) &&
M=$(git show-ref -s --verify refs/heads/master) &&
test "z$H" = "z$M" &&
if git symbolic-ref HEAD >/dev/null 2>&1
then
echo "OOPS, HEAD is still symbolic???"
false
else
: happy
fi
'

test_expect_success 'checkout to detach HEAD with branchname^' '

git checkout -f master && git clean &&
git checkout renamer^ &&
H=$(git rev-parse --verify HEAD) &&
M=$(git show-ref -s --verify refs/heads/master) &&
test "z$H" = "z$M" &&
if git symbolic-ref HEAD >/dev/null 2>&1
then
echo "OOPS, HEAD is still symbolic???"
false
else
: happy
fi
'

test_expect_success 'checkout to detach HEAD with HEAD^0' '

git checkout -f master && git clean &&
git checkout HEAD^0 &&
H=$(git rev-parse --verify HEAD) &&
M=$(git show-ref -s --verify refs/heads/master) &&
test "z$H" = "z$M" &&
if git symbolic-ref HEAD >/dev/null 2>&1
then
echo "OOPS, HEAD is still symbolic???"
false
else
: happy
fi
'

test_done test_done

Loading…
Cancel
Save