From: Tay Ray Chuan Date: Mon, 9 Aug 2010 16:52:26 +0000 (+0800) Subject: builtin/checkout: handle -B from detached HEAD correctly X-Git-Tag: v1.7.3-rc0~79^2 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=cc70148385d5a36682d3b67fdaa726590577f257;p=git.git builtin/checkout: handle -B from detached HEAD correctly Ensure that strcmp() isn't called when head is null. Previously we were getting segfaults when checkout -B was done from a detached HEAD. Signed-off-by: Tay Ray Chuan Signed-off-by: Junio C Hamano --- diff --git a/branch.c b/branch.c index 2ab42aaf4..93dc866f8 100644 --- a/branch.c +++ b/branch.c @@ -159,7 +159,7 @@ void create_branch(const char *head, dont_change_ref = 1; else if (!force) die("A branch named '%s' already exists.", name); - else if (!is_bare_repository() && !strcmp(head, name)) + else if (!is_bare_repository() && head && !strcmp(head, name)) die("Cannot force update the current branch."); forcing = 1; } diff --git a/t/t2018-checkout-branch.sh b/t/t2018-checkout-branch.sh index 1caffeac0..fa6901638 100755 --- a/t/t2018-checkout-branch.sh +++ b/t/t2018-checkout-branch.sh @@ -124,6 +124,12 @@ test_expect_success 'checkout -B to an existing branch resets branch to HEAD' ' do_checkout branch2 "" -B ' +test_expect_success 'checkout -B to an existing branch from detached HEAD resets branch to HEAD' ' + git checkout $(git rev-parse --verify HEAD) && + + do_checkout branch2 "" -B +' + test_expect_success 'checkout -B to an existing branch with an explicit ref resets branch to that ref' ' git checkout branch1 &&