Signed-off-by: Tay Ray Chuan <rctay89@xxxxxxxxx> --- Documentation/git-checkout.txt | 3 +++ builtin/checkout.c | 4 ++-- t/t2018-checkout-branch.sh | 6 +++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt index 261dd90..d15d224 100644 --- a/Documentation/git-checkout.txt +++ b/Documentation/git-checkout.txt @@ -74,6 +74,9 @@ entries; instead, unmerged entries are ignored. -b:: Create a new branch named <new_branch> and start it at <start_point>; see linkgit:git-branch[1] for details. ++ +When used with `-f`, the branch is reset; changes in the index or the +working tree are thrown away too. -t:: --track:: diff --git a/builtin/checkout.c b/builtin/checkout.c index 1994be9..962d938 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -511,7 +511,7 @@ static void update_refs_for_switch(struct checkout_opts *opts, } } else - create_branch(old->name, opts->new_branch, new->name, 0, + create_branch(old->name, opts->new_branch, new->name, opts->force, opts->new_branch_log, opts->track); new->name = opts->new_branch; setup_branch_path(new); @@ -858,7 +858,7 @@ no_reference: if (strbuf_check_branch_ref(&buf, opts.new_branch)) die("git checkout: we do not like '%s' as a branch name.", opts.new_branch); - if (!get_sha1(buf.buf, rev)) + if (!get_sha1(buf.buf, rev) && !opts.force) die("git checkout: branch %s already exists", opts.new_branch); strbuf_release(&buf); } diff --git a/t/t2018-checkout-branch.sh b/t/t2018-checkout-branch.sh index e6c0f8c..9895ff5 100755 --- a/t/t2018-checkout-branch.sh +++ b/t/t2018-checkout-branch.sh @@ -63,19 +63,19 @@ test_expect_success 'checkout -b to an existing branch fails' ' test_must_fail do_checkout branch2 $HEAD2 ' -test_expect_failure 'checkout -f -b to an existing branch resets branch' ' +test_expect_success 'checkout -f -b to an existing branch resets branch' ' git checkout branch1 && do_checkout branch2 "" -f ' -test_expect_failure 'checkout -f -b to an existing branch resets branch (explicit ref)' ' +test_expect_success 'checkout -f -b to an existing branch resets branch (explicit ref)' ' git checkout branch1 && do_checkout branch2 $HEAD1 -f ' -test_expect_failure 'checkout -f -b to an existing branch resets branch (dirty) ' ' +test_expect_success 'checkout -f -b to an existing branch resets branch (dirty) ' ' git checkout branch1 && setup_dirty && -- 1.7.1.513.g4f18 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html