Jonathan Nieder <jrnieder@xxxxxxxxx> writes: > Sverre Rabbelier wrote: > >> Now _that_ is an excellent usability improvement, assuming we want to >> encourage detaching HEAD... do we? > > Yes. > > -- 8< > Subject: commit: document --detach synonym for "git checkout foo^{commit}" > > For example, one might use this when making a temporary merge to test > that two topics work well together. > > This patch just documents the option. It is not meant for application > without an implementation and tests for the option. On top of v1.7.3.5-1-g0cb6ad3 (uk/checkout-ambiguous-ref)... builtin/checkout.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-) diff --git a/builtin/checkout.c b/builtin/checkout.c index 953abdd..141f6a3 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -685,6 +685,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) char *conflict_style = NULL; int patch_mode = 0; int dwim_new_local_branch = 1; + int force_detach = 0; struct option options[] = { OPT__QUIET(&opts.quiet), OPT_STRING('b', NULL, &opts.new_branch, "branch", @@ -692,6 +693,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) OPT_STRING('B', NULL, &opts.new_branch_force, "branch", "create/reset and checkout a branch"), OPT_BOOLEAN('l', NULL, &opts.new_branch_log, "create reflog for new branch"), + OPT_BOOLEAN(0, "detach", &force_detach, "detach the HEAD at named commit"), OPT_SET_INT('t', "track", &opts.track, "set upstream info for new branch", BRANCH_TRACK_EXPLICIT), OPT_STRING(0, "orphan", &opts.new_orphan_branch, "new branch", "new unparented branch"), @@ -726,6 +728,9 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) if (opts.new_branch && opts.new_branch_force) die("-B cannot be used with -b"); + if ((opts.new_branch || opts.new_orphan_branch) && force_detach) + die("--detach cannot be used with -b/-B/--orphan"); + /* copy -B over to -b, so that we can just check the latter */ if (opts.new_branch_force) opts.new_branch = opts.new_branch_force; @@ -834,7 +839,8 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) new.name = arg; setup_branch_path(&new); - if (check_ref_format(new.path) == CHECK_REF_FORMAT_OK && + if (!force_detach && + check_ref_format(new.path) == CHECK_REF_FORMAT_OK && resolve_ref(new.path, branch_rev, 1, NULL)) hashcpy(rev, branch_rev); else -- 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