The plan is eventually to populate the new worktree via "git reset --hard" rather than "git checkout". Thus, rather than piggybacking on git-checkout's -b/-B ability to create a new branch at checkout time, git-worktree will need to do so itself. Signed-off-by: Eric Sunshine <sunshine@xxxxxxxxxxxxxx> --- I considered calling branch-related API, such as create_branch(), directly, however, git-branch provides extra value which may be useful in the future (such as when --track and --orphan get added to git-worktree), so it seemed wise to re-use git-branch's implementation rather than duplicating the functionality. If this proves the wrong choice, then the series can either be re-rolled or follow-on patches can address the issue. builtin/worktree.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/builtin/worktree.c b/builtin/worktree.c index cd06bf5..9be1c74 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -314,12 +314,23 @@ static int add(int ac, const char **av, const char *prefix) opts.new_branch = xstrndup(s, n); } + if (opts.new_branch) { + struct child_process cp; + memset(&cp, 0, sizeof(cp)); + cp.git_cmd = 1; + argv_array_push(&cp.args, "branch"); + if (opts.force_new_branch) + argv_array_push(&cp.args, "--force"); + argv_array_push(&cp.args, opts.new_branch); + argv_array_push(&cp.args, branch); + if (run_command(&cp)) + return -1; + branch = opts.new_branch; + } + argv_array_push(&cmd, "checkout"); if (opts.force) argv_array_push(&cmd, "--ignore-other-worktrees"); - if (opts.new_branch) - argv_array_pushl(&cmd, opts.force_new_branch ? "-B" : "-b", - opts.new_branch, NULL); if (opts.detach) argv_array_push(&cmd, "--detach"); argv_array_push(&cmd, branch); -- 2.5.0.rc1.201.ga12d9f8 -- 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