checkout -b <name>: correctly detect existing branch
[git/dscho.git] / builtin / checkout.c
blob88708d48bf5483a537839a2b1439af2880b1fd35
1 #include "cache.h"
2 #include "builtin.h"
3 #include "parse-options.h"
4 #include "refs.h"
5 #include "commit.h"
6 #include "tree.h"
7 #include "tree-walk.h"
8 #include "cache-tree.h"
9 #include "unpack-trees.h"
10 #include "dir.h"
11 #include "run-command.h"
12 #include "merge-recursive.h"
13 #include "branch.h"
14 #include "diff.h"
15 #include "revision.h"
16 #include "remote.h"
17 #include "blob.h"
18 #include "xdiff-interface.h"
19 #include "ll-merge.h"
20 #include "resolve-undo.h"
22 static const char * const checkout_usage[] = {
23 "git checkout [options] <branch>",
24 "git checkout [options] [<branch>] -- <file>...",
25 NULL,
28 struct checkout_opts {
29 int quiet;
30 int merge;
31 int force;
32 int writeout_stage;
33 int writeout_error;
35 /* not set by parse_options */
36 int branch_exists;
38 const char *new_branch;
39 const char *new_branch_force;
40 const char *new_orphan_branch;
41 int new_branch_log;
42 enum branch_track track;
45 static int post_checkout_hook(struct commit *old, struct commit *new,
46 int changed)
48 return run_hook(NULL, "post-checkout",
49 sha1_to_hex(old ? old->object.sha1 : null_sha1),
50 sha1_to_hex(new ? new->object.sha1 : null_sha1),
51 changed ? "1" : "0", NULL);
52 /* "new" can be NULL when checking out from the index before
53 a commit exists. */
57 static int update_some(const unsigned char *sha1, const char *base, int baselen,
58 const char *pathname, unsigned mode, int stage, void *context)
60 int len;
61 struct cache_entry *ce;
63 if (S_ISDIR(mode))
64 return READ_TREE_RECURSIVE;
66 len = baselen + strlen(pathname);
67 ce = xcalloc(1, cache_entry_size(len));
68 hashcpy(ce->sha1, sha1);
69 memcpy(ce->name, base, baselen);
70 memcpy(ce->name + baselen, pathname, len - baselen);
71 ce->ce_flags = create_ce_flags(len, 0);
72 ce->ce_mode = create_ce_mode(mode);
73 add_cache_entry(ce, ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE);
74 return 0;
77 static int read_tree_some(struct tree *tree, const char **pathspec)
79 read_tree_recursive(tree, "", 0, 0, pathspec, update_some, NULL);
81 /* update the index with the given tree's info
82 * for all args, expanding wildcards, and exit
83 * with any non-zero return code.
85 return 0;
88 static int skip_same_name(struct cache_entry *ce, int pos)
90 while (++pos < active_nr &&
91 !strcmp(active_cache[pos]->name, ce->name))
92 ; /* skip */
93 return pos;
96 static int check_stage(int stage, struct cache_entry *ce, int pos)
98 while (pos < active_nr &&
99 !strcmp(active_cache[pos]->name, ce->name)) {
100 if (ce_stage(active_cache[pos]) == stage)
101 return 0;
102 pos++;
104 return error("path '%s' does not have %s version",
105 ce->name,
106 (stage == 2) ? "our" : "their");
109 static int check_all_stages(struct cache_entry *ce, int pos)
111 if (ce_stage(ce) != 1 ||
112 active_nr <= pos + 2 ||
113 strcmp(active_cache[pos+1]->name, ce->name) ||
114 ce_stage(active_cache[pos+1]) != 2 ||
115 strcmp(active_cache[pos+2]->name, ce->name) ||
116 ce_stage(active_cache[pos+2]) != 3)
117 return error("path '%s' does not have all three versions",
118 ce->name);
119 return 0;
122 static int checkout_stage(int stage, struct cache_entry *ce, int pos,
123 struct checkout *state)
125 while (pos < active_nr &&
126 !strcmp(active_cache[pos]->name, ce->name)) {
127 if (ce_stage(active_cache[pos]) == stage)
128 return checkout_entry(active_cache[pos], state, NULL);
129 pos++;
131 return error("path '%s' does not have %s version",
132 ce->name,
133 (stage == 2) ? "our" : "their");
136 static int checkout_merged(int pos, struct checkout *state)
138 struct cache_entry *ce = active_cache[pos];
139 const char *path = ce->name;
140 mmfile_t ancestor, ours, theirs;
141 int status;
142 unsigned char sha1[20];
143 mmbuffer_t result_buf;
145 if (ce_stage(ce) != 1 ||
146 active_nr <= pos + 2 ||
147 strcmp(active_cache[pos+1]->name, path) ||
148 ce_stage(active_cache[pos+1]) != 2 ||
149 strcmp(active_cache[pos+2]->name, path) ||
150 ce_stage(active_cache[pos+2]) != 3)
151 return error("path '%s' does not have all 3 versions", path);
153 read_mmblob(&ancestor, active_cache[pos]->sha1);
154 read_mmblob(&ours, active_cache[pos+1]->sha1);
155 read_mmblob(&theirs, active_cache[pos+2]->sha1);
157 status = ll_merge(&result_buf, path, &ancestor, "base",
158 &ours, "ours", &theirs, "theirs", 0);
159 free(ancestor.ptr);
160 free(ours.ptr);
161 free(theirs.ptr);
162 if (status < 0 || !result_buf.ptr) {
163 free(result_buf.ptr);
164 return error("path '%s': cannot merge", path);
168 * NEEDSWORK:
169 * There is absolutely no reason to write this as a blob object
170 * and create a phony cache entry just to leak. This hack is
171 * primarily to get to the write_entry() machinery that massages
172 * the contents to work-tree format and writes out which only
173 * allows it for a cache entry. The code in write_entry() needs
174 * to be refactored to allow us to feed a <buffer, size, mode>
175 * instead of a cache entry. Such a refactoring would help
176 * merge_recursive as well (it also writes the merge result to the
177 * object database even when it may contain conflicts).
179 if (write_sha1_file(result_buf.ptr, result_buf.size,
180 blob_type, sha1))
181 die("Unable to add merge result for '%s'", path);
182 ce = make_cache_entry(create_ce_mode(active_cache[pos+1]->ce_mode),
183 sha1,
184 path, 2, 0);
185 if (!ce)
186 die("make_cache_entry failed for path '%s'", path);
187 status = checkout_entry(ce, state, NULL);
188 return status;
191 static int checkout_paths(struct tree *source_tree, const char **pathspec,
192 struct checkout_opts *opts)
194 int pos;
195 struct checkout state;
196 static char *ps_matched;
197 unsigned char rev[20];
198 int flag;
199 struct commit *head;
200 int errs = 0;
201 int stage = opts->writeout_stage;
202 int merge = opts->merge;
203 int newfd;
204 struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
206 newfd = hold_locked_index(lock_file, 1);
207 if (read_cache_preload(pathspec) < 0)
208 return error("corrupt index file");
210 if (source_tree)
211 read_tree_some(source_tree, pathspec);
213 for (pos = 0; pathspec[pos]; pos++)
215 ps_matched = xcalloc(1, pos);
217 for (pos = 0; pos < active_nr; pos++) {
218 struct cache_entry *ce = active_cache[pos];
219 match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, ps_matched);
222 if (report_path_error(ps_matched, pathspec, 0))
223 return 1;
225 /* "checkout -m path" to recreate conflicted state */
226 if (opts->merge)
227 unmerge_cache(pathspec);
229 /* Any unmerged paths? */
230 for (pos = 0; pos < active_nr; pos++) {
231 struct cache_entry *ce = active_cache[pos];
232 if (match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, NULL)) {
233 if (!ce_stage(ce))
234 continue;
235 if (opts->force) {
236 warning("path '%s' is unmerged", ce->name);
237 } else if (stage) {
238 errs |= check_stage(stage, ce, pos);
239 } else if (opts->merge) {
240 errs |= check_all_stages(ce, pos);
241 } else {
242 errs = 1;
243 error("path '%s' is unmerged", ce->name);
245 pos = skip_same_name(ce, pos) - 1;
248 if (errs)
249 return 1;
251 /* Now we are committed to check them out */
252 memset(&state, 0, sizeof(state));
253 state.force = 1;
254 state.refresh_cache = 1;
255 for (pos = 0; pos < active_nr; pos++) {
256 struct cache_entry *ce = active_cache[pos];
257 if (match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, NULL)) {
258 if (!ce_stage(ce)) {
259 errs |= checkout_entry(ce, &state, NULL);
260 continue;
262 if (stage)
263 errs |= checkout_stage(stage, ce, pos, &state);
264 else if (merge)
265 errs |= checkout_merged(pos, &state);
266 pos = skip_same_name(ce, pos) - 1;
270 if (write_cache(newfd, active_cache, active_nr) ||
271 commit_locked_index(lock_file))
272 die("unable to write new index file");
274 resolve_ref("HEAD", rev, 0, &flag);
275 head = lookup_commit_reference_gently(rev, 1);
277 errs |= post_checkout_hook(head, head, 0);
278 return errs;
281 static void show_local_changes(struct object *head)
283 struct rev_info rev;
284 /* I think we want full paths, even if we're in a subdirectory. */
285 init_revisions(&rev, NULL);
286 rev.abbrev = 0;
287 rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS;
288 if (diff_setup_done(&rev.diffopt) < 0)
289 die("diff_setup_done failed");
290 add_pending_object(&rev, head, NULL);
291 run_diff_index(&rev, 0);
294 static void describe_detached_head(char *msg, struct commit *commit)
296 struct strbuf sb = STRBUF_INIT;
297 struct pretty_print_context ctx = {0};
298 parse_commit(commit);
299 pretty_print_commit(CMIT_FMT_ONELINE, commit, &sb, &ctx);
300 fprintf(stderr, "%s %s... %s\n", msg,
301 find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV), sb.buf);
302 strbuf_release(&sb);
305 static int reset_tree(struct tree *tree, struct checkout_opts *o, int worktree)
307 struct unpack_trees_options opts;
308 struct tree_desc tree_desc;
310 memset(&opts, 0, sizeof(opts));
311 opts.head_idx = -1;
312 opts.update = worktree;
313 opts.skip_unmerged = !worktree;
314 opts.reset = 1;
315 opts.merge = 1;
316 opts.fn = oneway_merge;
317 opts.verbose_update = !o->quiet;
318 opts.src_index = &the_index;
319 opts.dst_index = &the_index;
320 parse_tree(tree);
321 init_tree_desc(&tree_desc, tree->buffer, tree->size);
322 switch (unpack_trees(1, &tree_desc, &opts)) {
323 case -2:
324 o->writeout_error = 1;
326 * We return 0 nevertheless, as the index is all right
327 * and more importantly we have made best efforts to
328 * update paths in the work tree, and we cannot revert
329 * them.
331 case 0:
332 return 0;
333 default:
334 return 128;
338 struct branch_info {
339 const char *name; /* The short name used */
340 const char *path; /* The full name of a real branch */
341 struct commit *commit; /* The named commit */
344 static void setup_branch_path(struct branch_info *branch)
346 struct strbuf buf = STRBUF_INIT;
348 strbuf_branchname(&buf, branch->name);
349 if (strcmp(buf.buf, branch->name))
350 branch->name = xstrdup(buf.buf);
351 strbuf_splice(&buf, 0, 0, "refs/heads/", 11);
352 branch->path = strbuf_detach(&buf, NULL);
355 static int merge_working_tree(struct checkout_opts *opts,
356 struct branch_info *old, struct branch_info *new)
358 int ret;
359 struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
360 int newfd = hold_locked_index(lock_file, 1);
362 if (read_cache_preload(NULL) < 0)
363 return error("corrupt index file");
365 resolve_undo_clear();
366 if (opts->force) {
367 ret = reset_tree(new->commit->tree, opts, 1);
368 if (ret)
369 return ret;
370 } else {
371 struct tree_desc trees[2];
372 struct tree *tree;
373 struct unpack_trees_options topts;
375 memset(&topts, 0, sizeof(topts));
376 topts.head_idx = -1;
377 topts.src_index = &the_index;
378 topts.dst_index = &the_index;
380 topts.msgs.not_uptodate_file = "You have local changes to '%s'; cannot switch branches.";
382 refresh_cache(REFRESH_QUIET);
384 if (unmerged_cache()) {
385 error("you need to resolve your current index first");
386 return 1;
389 /* 2-way merge to the new branch */
390 topts.initial_checkout = is_cache_unborn();
391 topts.update = 1;
392 topts.merge = 1;
393 topts.gently = opts->merge && old->commit;
394 topts.verbose_update = !opts->quiet;
395 topts.fn = twoway_merge;
396 topts.dir = xcalloc(1, sizeof(*topts.dir));
397 topts.dir->flags |= DIR_SHOW_IGNORED;
398 topts.dir->exclude_per_dir = ".gitignore";
399 tree = parse_tree_indirect(old->commit ?
400 old->commit->object.sha1 :
401 (unsigned char *)EMPTY_TREE_SHA1_BIN);
402 init_tree_desc(&trees[0], tree->buffer, tree->size);
403 tree = parse_tree_indirect(new->commit->object.sha1);
404 init_tree_desc(&trees[1], tree->buffer, tree->size);
406 ret = unpack_trees(2, trees, &topts);
407 if (ret == -1) {
409 * Unpack couldn't do a trivial merge; either
410 * give up or do a real merge, depending on
411 * whether the merge flag was used.
413 struct tree *result;
414 struct tree *work;
415 struct merge_options o;
416 if (!opts->merge)
417 return 1;
420 * Without old->commit, the below is the same as
421 * the two-tree unpack we already tried and failed.
423 if (!old->commit)
424 return 1;
426 /* Do more real merge */
429 * We update the index fully, then write the
430 * tree from the index, then merge the new
431 * branch with the current tree, with the old
432 * branch as the base. Then we reset the index
433 * (but not the working tree) to the new
434 * branch, leaving the working tree as the
435 * merged version, but skipping unmerged
436 * entries in the index.
439 add_files_to_cache(NULL, NULL, 0);
440 init_merge_options(&o);
441 o.verbosity = 0;
442 work = write_tree_from_memory(&o);
444 ret = reset_tree(new->commit->tree, opts, 1);
445 if (ret)
446 return ret;
447 o.ancestor = old->name;
448 o.branch1 = new->name;
449 o.branch2 = "local";
450 merge_trees(&o, new->commit->tree, work,
451 old->commit->tree, &result);
452 ret = reset_tree(new->commit->tree, opts, 0);
453 if (ret)
454 return ret;
458 if (write_cache(newfd, active_cache, active_nr) ||
459 commit_locked_index(lock_file))
460 die("unable to write new index file");
462 if (!opts->force && !opts->quiet)
463 show_local_changes(&new->commit->object);
465 return 0;
468 static void report_tracking(struct branch_info *new)
470 struct strbuf sb = STRBUF_INIT;
471 struct branch *branch = branch_get(new->name);
473 if (!format_tracking_info(branch, &sb))
474 return;
475 fputs(sb.buf, stdout);
476 strbuf_release(&sb);
479 static void detach_advice(const char *old_path, const char *new_name)
481 const char fmt[] =
482 "Note: checking out '%s'.\n\n"
483 "You are in 'detached HEAD' state. You can look around, make experimental\n"
484 "changes and commit them, and you can discard any commits you make in this\n"
485 "state without impacting any branches by performing another checkout.\n\n"
486 "If you want to create a new branch to retain commits you create, you may\n"
487 "do so (now or later) by using -b with the checkout command again. Example:\n\n"
488 " git checkout -b new_branch_name\n\n";
490 fprintf(stderr, fmt, new_name);
493 static void update_refs_for_switch(struct checkout_opts *opts,
494 struct branch_info *old,
495 struct branch_info *new)
497 struct strbuf msg = STRBUF_INIT;
498 const char *old_desc;
499 if (opts->new_branch) {
500 if (opts->new_orphan_branch) {
501 if (opts->new_branch_log && !log_all_ref_updates) {
502 int temp;
503 char log_file[PATH_MAX];
504 char *ref_name = mkpath("refs/heads/%s", opts->new_orphan_branch);
506 temp = log_all_ref_updates;
507 log_all_ref_updates = 1;
508 if (log_ref_setup(ref_name, log_file, sizeof(log_file))) {
509 fprintf(stderr, "Can not do reflog for '%s'\n",
510 opts->new_orphan_branch);
511 log_all_ref_updates = temp;
512 return;
514 log_all_ref_updates = temp;
517 else
518 create_branch(old->name, opts->new_branch, new->name,
519 opts->new_branch_force ? 1 : 0,
520 opts->new_branch_log, opts->track);
521 new->name = opts->new_branch;
522 setup_branch_path(new);
525 old_desc = old->name;
526 if (!old_desc && old->commit)
527 old_desc = sha1_to_hex(old->commit->object.sha1);
528 strbuf_addf(&msg, "checkout: moving from %s to %s",
529 old_desc ? old_desc : "(invalid)", new->name);
531 if (new->path) {
532 create_symref("HEAD", new->path, msg.buf);
533 if (!opts->quiet) {
534 if (old->path && !strcmp(new->path, old->path))
535 fprintf(stderr, "Already on '%s'\n",
536 new->name);
537 else
538 fprintf(stderr, "Switched to%s branch '%s'\n",
539 opts->branch_exists ? " and reset" : " a new",
540 new->name);
542 if (old->path && old->name) {
543 char log_file[PATH_MAX], ref_file[PATH_MAX];
545 git_snpath(log_file, sizeof(log_file), "logs/%s", old->path);
546 git_snpath(ref_file, sizeof(ref_file), "%s", old->path);
547 if (!file_exists(ref_file) && file_exists(log_file))
548 remove_path(log_file);
550 } else if (strcmp(new->name, "HEAD")) {
551 update_ref(msg.buf, "HEAD", new->commit->object.sha1, NULL,
552 REF_NODEREF, DIE_ON_ERR);
553 if (!opts->quiet) {
554 if (old->path && advice_detached_head)
555 detach_advice(old->path, new->name);
556 describe_detached_head("HEAD is now at", new->commit);
559 remove_branch_state();
560 strbuf_release(&msg);
561 if (!opts->quiet && (new->path || !strcmp(new->name, "HEAD")))
562 report_tracking(new);
565 static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
567 int ret = 0;
568 struct branch_info old;
569 unsigned char rev[20];
570 int flag;
571 memset(&old, 0, sizeof(old));
572 old.path = resolve_ref("HEAD", rev, 0, &flag);
573 old.commit = lookup_commit_reference_gently(rev, 1);
574 if (!(flag & REF_ISSYMREF))
575 old.path = NULL;
577 if (old.path && !prefixcmp(old.path, "refs/heads/"))
578 old.name = old.path + strlen("refs/heads/");
580 if (!new->name) {
581 new->name = "HEAD";
582 new->commit = old.commit;
583 if (!new->commit)
584 die("You are on a branch yet to be born");
585 parse_commit(new->commit);
588 ret = merge_working_tree(opts, &old, new);
589 if (ret)
590 return ret;
593 * If we were on a detached HEAD, but have now moved to
594 * a new commit, we want to mention the old commit once more
595 * to remind the user that it might be lost.
597 if (!opts->quiet && !old.path && old.commit && new->commit != old.commit)
598 describe_detached_head("Previous HEAD position was", old.commit);
600 update_refs_for_switch(opts, &old, new);
602 ret = post_checkout_hook(old.commit, new->commit, 1);
603 return ret || opts->writeout_error;
606 static int git_checkout_config(const char *var, const char *value, void *cb)
608 return git_xmerge_config(var, value, cb);
611 static int interactive_checkout(const char *revision, const char **pathspec,
612 struct checkout_opts *opts)
614 return run_add_interactive(revision, "--patch=checkout", pathspec);
617 struct tracking_name_data {
618 const char *name;
619 char *remote;
620 int unique;
623 static int check_tracking_name(const char *refname, const unsigned char *sha1,
624 int flags, void *cb_data)
626 struct tracking_name_data *cb = cb_data;
627 const char *slash;
629 if (prefixcmp(refname, "refs/remotes/"))
630 return 0;
631 slash = strchr(refname + 13, '/');
632 if (!slash || strcmp(slash + 1, cb->name))
633 return 0;
634 if (cb->remote) {
635 cb->unique = 0;
636 return 0;
638 cb->remote = xstrdup(refname);
639 return 0;
642 static const char *unique_tracking_name(const char *name)
644 struct tracking_name_data cb_data = { NULL, NULL, 1 };
645 cb_data.name = name;
646 for_each_ref(check_tracking_name, &cb_data);
647 if (cb_data.unique)
648 return cb_data.remote;
649 free(cb_data.remote);
650 return NULL;
653 int cmd_checkout(int argc, const char **argv, const char *prefix)
655 struct checkout_opts opts;
656 unsigned char rev[20];
657 const char *arg;
658 struct branch_info new;
659 struct tree *source_tree = NULL;
660 char *conflict_style = NULL;
661 int patch_mode = 0;
662 int dwim_new_local_branch = 1;
663 struct option options[] = {
664 OPT__QUIET(&opts.quiet),
665 OPT_STRING('b', NULL, &opts.new_branch, "branch",
666 "create and checkout a new branch"),
667 OPT_STRING('B', NULL, &opts.new_branch_force, "branch",
668 "create/reset and checkout a branch"),
669 OPT_BOOLEAN('l', NULL, &opts.new_branch_log, "log for new branch"),
670 OPT_SET_INT('t', "track", &opts.track, "track",
671 BRANCH_TRACK_EXPLICIT),
672 OPT_STRING(0, "orphan", &opts.new_orphan_branch, "new branch", "new unparented branch"),
673 OPT_SET_INT('2', "ours", &opts.writeout_stage, "stage",
675 OPT_SET_INT('3', "theirs", &opts.writeout_stage, "stage",
677 OPT_BOOLEAN('f', "force", &opts.force, "force"),
678 OPT_BOOLEAN('m', "merge", &opts.merge, "merge"),
679 OPT_STRING(0, "conflict", &conflict_style, "style",
680 "conflict style (merge or diff3)"),
681 OPT_BOOLEAN('p', "patch", &patch_mode, "select hunks interactively"),
682 { OPTION_BOOLEAN, 0, "guess", &dwim_new_local_branch, NULL,
683 "second guess 'git checkout no-such-branch'",
684 PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },
685 OPT_END(),
687 int has_dash_dash;
689 memset(&opts, 0, sizeof(opts));
690 memset(&new, 0, sizeof(new));
692 git_config(git_checkout_config, NULL);
694 opts.track = BRANCH_TRACK_UNSPECIFIED;
696 argc = parse_options(argc, argv, prefix, options, checkout_usage,
697 PARSE_OPT_KEEP_DASHDASH);
699 /* we can assume from now on new_branch = !new_branch_force */
700 if (opts.new_branch && opts.new_branch_force)
701 die("-B cannot be used with -b");
703 /* copy -B over to -b, so that we can just check the latter */
704 if (opts.new_branch_force)
705 opts.new_branch = opts.new_branch_force;
707 if (patch_mode && (opts.track > 0 || opts.new_branch
708 || opts.new_branch_log || opts.merge || opts.force))
709 die ("--patch is incompatible with all other options");
711 /* --track without -b should DWIM */
712 if (0 < opts.track && !opts.new_branch) {
713 const char *argv0 = argv[0];
714 if (!argc || !strcmp(argv0, "--"))
715 die ("--track needs a branch name");
716 if (!prefixcmp(argv0, "refs/"))
717 argv0 += 5;
718 if (!prefixcmp(argv0, "remotes/"))
719 argv0 += 8;
720 argv0 = strchr(argv0, '/');
721 if (!argv0 || !argv0[1])
722 die ("Missing branch name; try -b");
723 opts.new_branch = argv0 + 1;
726 if (opts.new_orphan_branch) {
727 if (opts.new_branch)
728 die("--orphan and -b|-B are mutually exclusive");
729 if (opts.track > 0)
730 die("--orphan cannot be used with -t");
731 opts.new_branch = opts.new_orphan_branch;
734 if (conflict_style) {
735 opts.merge = 1; /* implied */
736 git_xmerge_config("merge.conflictstyle", conflict_style, NULL);
739 if (opts.force && opts.merge)
740 die("git checkout: -f and -m are incompatible");
743 * case 1: git checkout <ref> -- [<paths>]
745 * <ref> must be a valid tree, everything after the '--' must be
746 * a path.
748 * case 2: git checkout -- [<paths>]
750 * everything after the '--' must be paths.
752 * case 3: git checkout <something> [<paths>]
754 * With no paths, if <something> is a commit, that is to
755 * switch to the branch or detach HEAD at it. As a special case,
756 * if <something> is A...B (missing A or B means HEAD but you can
757 * omit at most one side), and if there is a unique merge base
758 * between A and B, A...B names that merge base.
760 * With no paths, if <something> is _not_ a commit, no -t nor -b
761 * was given, and there is a tracking branch whose name is
762 * <something> in one and only one remote, then this is a short-hand
763 * to fork local <something> from that remote tracking branch.
765 * Otherwise <something> shall not be ambiguous.
766 * - If it's *only* a reference, treat it like case (1).
767 * - If it's only a path, treat it like case (2).
768 * - else: fail.
771 if (argc) {
772 if (!strcmp(argv[0], "--")) { /* case (2) */
773 argv++;
774 argc--;
775 goto no_reference;
778 arg = argv[0];
779 has_dash_dash = (argc > 1) && !strcmp(argv[1], "--");
781 if (!strcmp(arg, "-"))
782 arg = "@{-1}";
784 if (get_sha1_mb(arg, rev)) {
785 if (has_dash_dash) /* case (1) */
786 die("invalid reference: %s", arg);
787 if (!patch_mode &&
788 dwim_new_local_branch &&
789 opts.track == BRANCH_TRACK_UNSPECIFIED &&
790 !opts.new_branch &&
791 !check_filename(NULL, arg) &&
792 argc == 1) {
793 const char *remote = unique_tracking_name(arg);
794 if (!remote || get_sha1(remote, rev))
795 goto no_reference;
796 opts.new_branch = arg;
797 arg = remote;
798 /* DWIMmed to create local branch */
800 else
801 goto no_reference;
804 /* we can't end up being in (2) anymore, eat the argument */
805 argv++;
806 argc--;
808 new.name = arg;
809 if ((new.commit = lookup_commit_reference_gently(rev, 1))) {
810 setup_branch_path(&new);
812 if ((check_ref_format(new.path) == CHECK_REF_FORMAT_OK) &&
813 resolve_ref(new.path, rev, 1, NULL))
815 else
816 new.path = NULL;
817 parse_commit(new.commit);
818 source_tree = new.commit->tree;
819 } else
820 source_tree = parse_tree_indirect(rev);
822 if (!source_tree) /* case (1): want a tree */
823 die("reference is not a tree: %s", arg);
824 if (!has_dash_dash) {/* case (3 -> 1) */
826 * Do not complain the most common case
827 * git checkout branch
828 * even if there happen to be a file called 'branch';
829 * it would be extremely annoying.
831 if (argc)
832 verify_non_filename(NULL, arg);
834 else {
835 argv++;
836 argc--;
840 no_reference:
842 if (opts.track == BRANCH_TRACK_UNSPECIFIED)
843 opts.track = git_branch_track;
845 if (argc) {
846 const char **pathspec = get_pathspec(prefix, argv);
848 if (!pathspec)
849 die("invalid path specification");
851 if (patch_mode)
852 return interactive_checkout(new.name, pathspec, &opts);
854 /* Checkout paths */
855 if (opts.new_branch) {
856 if (argc == 1) {
857 die("git checkout: updating paths is incompatible with switching branches.\nDid you intend to checkout '%s' which can not be resolved as commit?", argv[0]);
858 } else {
859 die("git checkout: updating paths is incompatible with switching branches.");
863 if (1 < !!opts.writeout_stage + !!opts.force + !!opts.merge)
864 die("git checkout: --ours/--theirs, --force and --merge are incompatible when\nchecking out of the index.");
866 return checkout_paths(source_tree, pathspec, &opts);
869 if (patch_mode)
870 return interactive_checkout(new.name, NULL, &opts);
872 if (opts.new_branch) {
873 struct strbuf buf = STRBUF_INIT;
874 if (strbuf_check_branch_ref(&buf, opts.new_branch))
875 die("git checkout: we do not like '%s' as a branch name.",
876 opts.new_branch);
877 if (ref_exists(buf.buf)) {
878 opts.branch_exists = 1;
879 if (!opts.new_branch_force)
880 die("git checkout: branch %s already exists",
881 opts.new_branch);
883 strbuf_release(&buf);
886 if (new.name && !new.commit) {
887 die("Cannot switch branch to a non-commit.");
889 if (opts.writeout_stage)
890 die("--ours/--theirs is incompatible with switching branches.");
892 return switch_branches(&opts, &new);