From: Junio C Hamano Date: Fri, 21 May 2010 11:02:14 +0000 (-0700) Subject: Merge branch 'em/checkout-orphan' X-Git-Tag: v1.7.2-rc0~131 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/e2ab0227aab5cdcede3b39e4c95b118f09a71d29?hp=-c Merge branch 'em/checkout-orphan' * em/checkout-orphan: git checkout: create unparented branch by --orphan --- e2ab0227aab5cdcede3b39e4c95b118f09a71d29 diff --combined builtin/checkout.c index 88b1f43e05,347927788b..c3825219c1 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@@ -33,6 -33,7 +33,7 @@@ struct checkout_opts int writeout_error; const char *new_branch; + const char *new_orphan_branch; int new_branch_log; enum branch_track track; }; @@@ -149,7 -150,7 +150,7 @@@ static int checkout_merged(int pos, str read_mmblob(&ours, active_cache[pos+1]->sha1); read_mmblob(&theirs, active_cache[pos+2]->sha1); - status = ll_merge(&result_buf, path, &ancestor, + status = ll_merge(&result_buf, path, &ancestor, "base", &ours, "ours", &theirs, "theirs", 0); free(ancestor.ptr); free(ours.ptr); @@@ -439,7 -440,6 +440,7 @@@ static int merge_working_tree(struct ch ret = reset_tree(new->commit->tree, opts, 1); if (ret) return ret; + o.ancestor = old->name; o.branch1 = new->name; o.branch2 = "local"; merge_trees(&o, new->commit->tree, work, @@@ -492,8 -492,9 +493,9 @@@ static void update_refs_for_switch(stru struct strbuf msg = STRBUF_INIT; const char *old_desc; if (opts->new_branch) { - create_branch(old->name, opts->new_branch, new->name, 0, - opts->new_branch_log, opts->track); + if (!opts->new_orphan_branch) + create_branch(old->name, opts->new_branch, new->name, 0, + opts->new_branch_log, opts->track); new->name = opts->new_branch; setup_branch_path(new); } @@@ -633,6 -634,7 +635,7 @@@ int cmd_checkout(int argc, const char * OPT_BOOLEAN('l', NULL, &opts.new_branch_log, "log for new branch"), OPT_SET_INT('t', "track", &opts.track, "track", BRANCH_TRACK_EXPLICIT), + OPT_STRING(0, "orphan", &opts.new_orphan_branch, "new branch", "new unparented branch"), OPT_SET_INT('2', "ours", &opts.writeout_stage, "stage", 2), OPT_SET_INT('3', "theirs", &opts.writeout_stage, "stage", @@@ -678,6 -680,14 +681,14 @@@ opts.new_branch = argv0 + 1; } + if (opts.new_orphan_branch) { + if (opts.new_branch) + die("--orphan and -b are mutually exclusive"); + if (opts.track > 0 || opts.new_branch_log) + die("--orphan cannot be used with -t or -l"); + opts.new_branch = opts.new_orphan_branch; + } + if (conflict_style) { opts.merge = 1; /* implied */ git_xmerge_config("merge.conflictstyle", conflict_style, NULL);