diff options
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/worktree.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/builtin/worktree.c b/builtin/worktree.c index 6bd32b6090..d3aeb4877d 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -391,8 +391,17 @@ static const char *dwim_branch(const char *path, const char **new_branch) { int n; const char *s = worktree_basename(path, &n); - *new_branch = xstrndup(s, n); - UNLEAK(*new_branch); + const char *branchname = xstrndup(s, n); + struct strbuf ref = STRBUF_INIT; + + UNLEAK(branchname); + if (!strbuf_check_branch_ref(&ref, branchname) && + ref_exists(ref.buf)) { + strbuf_release(&ref); + return branchname; + } + + *new_branch = branchname; if (guess_remote) { struct object_id oid; const char *remote = |