To be pedantic, I'll put
check_detached () {
test_must_fail git symbolic-ref -q HEAD >/dev/null
} check_not_detached () {
git symbolic-ref -q HEAD >/dev/null
}and add some more paranoid tests:
test_expect_success 'checkout --detach without branch name detaches' '
reset &&
git checkout --detach &&
check_detached
' test_expect_success 'checkout --detach catches error in usage' '
reset &&
git checkout master &&
test_must_fail git checkout --detach tag nonsense &&
check_not_detached
'
test_expect_success 'checkout --detach moves HEAD' '
reset &&
git checkout one &&
git checkout --detach two &&
git diff --exit-code HEAD &&
git diff --exit-code two
'