On Sun, Feb 04, 2018 at 10:13:05PM +0000, Thomas Gummerer wrote: > - if (opts->new_branch) > + if (opts->checkout_existing_branch) > + fprintf(stderr, _(", checking out existing branch '%s'"), > + refname); > + else if (opts->new_branch) > fprintf(stderr, _(", creating new branch '%s'"), opts->new_branch); I wonder if "creating branch" and "checkout out branch" are enough. > @@ -423,14 +427,25 @@ static int add(int ac, const char **av, const char *prefix) > if (ac < 2 && !opts.new_branch && !opts.detach) { > int n; > const char *s = worktree_basename(path, &n); > - opts.new_branch = xstrndup(s, n); > - if (guess_remote) { > - struct object_id oid; > - const char *remote = > - unique_tracking_name(opts.new_branch, &oid); > - if (remote) > - branch = remote; > + const char *branchname = xstrndup(s, n); > + struct strbuf ref = STRBUF_INIT; > + > + if (!strbuf_check_branch_ref(&ref, branchname) && > + ref_exists(ref.buf)) { > + branch = branchname; > + opts.checkout_existing_branch = 1; > + UNLEAK(branch); > + } else { > + opts.new_branch = branchname; > + if (guess_remote) { > + struct object_id oid; > + const char *remote = > + unique_tracking_name(opts.new_branch, &oid); Deep indentation may be a sign that it's time to move all this code to a separate function, maybe dwim_branch() or something. > + if (remote) > + branch = remote; > + } > } > + strbuf_release(&ref); > } > > if (ac == 2 && !opts.new_branch && !opts.detach) {