3 #include "parse-options.h"
8 #include "cache-tree.h"
9 #include "unpack-trees.h"
11 #include "run-command.h"
12 #include "merge-recursive.h"
18 #include "xdiff-interface.h"
20 #include "resolve-undo.h"
21 #include "submodule.h"
22 #include "argv-array.h"
24 static const char * const checkout_usage[] = {
25 "git checkout [options] <branch>",
26 "git checkout [options] [<branch>] -- <file>...",
30 struct checkout_opts {
39 /* not set by parse_options */
42 const char *new_branch;
43 const char *new_branch_force;
44 const char *new_orphan_branch;
46 enum branch_track track;
47 struct diff_options diff_options;
50 static int post_checkout_hook(struct commit *old, struct commit *new,
53 return run_hook(NULL, "post-checkout",
54 sha1_to_hex(old ? old->object.sha1 : null_sha1),
55 sha1_to_hex(new ? new->object.sha1 : null_sha1),
56 changed ? "1" : "0", NULL);
57 /* "new" can be NULL when checking out from the index before
62 static int update_some(const unsigned char *sha1, const char *base, int baselen,
63 const char *pathname, unsigned mode, int stage, void *context)
66 struct cache_entry *ce;
69 return READ_TREE_RECURSIVE;
71 len = baselen + strlen(pathname);
72 ce = xcalloc(1, cache_entry_size(len));
73 hashcpy(ce->sha1, sha1);
74 memcpy(ce->name, base, baselen);
75 memcpy(ce->name + baselen, pathname, len - baselen);
76 ce->ce_flags = create_ce_flags(len, 0) | CE_UPDATE;
77 ce->ce_mode = create_ce_mode(mode);
78 add_cache_entry(ce, ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE);
82 static int read_tree_some(struct tree *tree, const char **pathspec)
85 init_pathspec(&ps, pathspec);
86 read_tree_recursive(tree, "", 0, 0, &ps, update_some, NULL);
89 /* update the index with the given tree's info
90 * for all args, expanding wildcards, and exit
91 * with any non-zero return code.
96 static int skip_same_name(struct cache_entry *ce, int pos)
98 while (++pos < active_nr &&
99 !strcmp(active_cache[pos]->name, ce->name))
104 static int check_stage(int stage, struct cache_entry *ce, int pos)
106 while (pos < active_nr &&
107 !strcmp(active_cache[pos]->name, ce->name)) {
108 if (ce_stage(active_cache[pos]) == stage)
113 return error(_("path '%s' does not have our version"), ce->name);
115 return error(_("path '%s' does not have their version"), ce->name);
118 static int check_all_stages(struct cache_entry *ce, int pos)
120 if (ce_stage(ce) != 1 ||
121 active_nr <= pos + 2 ||
122 strcmp(active_cache[pos+1]->name, ce->name) ||
123 ce_stage(active_cache[pos+1]) != 2 ||
124 strcmp(active_cache[pos+2]->name, ce->name) ||
125 ce_stage(active_cache[pos+2]) != 3)
126 return error(_("path '%s' does not have all three versions"),
131 static int checkout_stage(int stage, struct cache_entry *ce, int pos,
132 struct checkout *state)
134 while (pos < active_nr &&
135 !strcmp(active_cache[pos]->name, ce->name)) {
136 if (ce_stage(active_cache[pos]) == stage)
137 return checkout_entry(active_cache[pos], state, NULL);
141 return error(_("path '%s' does not have our version"), ce->name);
143 return error(_("path '%s' does not have their version"), ce->name);
146 static int checkout_merged(int pos, struct checkout *state)
148 struct cache_entry *ce = active_cache[pos];
149 const char *path = ce->name;
150 mmfile_t ancestor, ours, theirs;
152 unsigned char sha1[20];
153 mmbuffer_t result_buf;
155 if (ce_stage(ce) != 1 ||
156 active_nr <= pos + 2 ||
157 strcmp(active_cache[pos+1]->name, path) ||
158 ce_stage(active_cache[pos+1]) != 2 ||
159 strcmp(active_cache[pos+2]->name, path) ||
160 ce_stage(active_cache[pos+2]) != 3)
161 return error(_("path '%s' does not have all 3 versions"), path);
163 read_mmblob(&ancestor, active_cache[pos]->sha1);
164 read_mmblob(&ours, active_cache[pos+1]->sha1);
165 read_mmblob(&theirs, active_cache[pos+2]->sha1);
168 * NEEDSWORK: re-create conflicts from merges with
169 * merge.renormalize set, too
171 status = ll_merge(&result_buf, path, &ancestor, "base",
172 &ours, "ours", &theirs, "theirs", NULL);
176 if (status < 0 || !result_buf.ptr) {
177 free(result_buf.ptr);
178 return error(_("path '%s': cannot merge"), path);
183 * There is absolutely no reason to write this as a blob object
184 * and create a phony cache entry just to leak. This hack is
185 * primarily to get to the write_entry() machinery that massages
186 * the contents to work-tree format and writes out which only
187 * allows it for a cache entry. The code in write_entry() needs
188 * to be refactored to allow us to feed a <buffer, size, mode>
189 * instead of a cache entry. Such a refactoring would help
190 * merge_recursive as well (it also writes the merge result to the
191 * object database even when it may contain conflicts).
193 if (write_sha1_file(result_buf.ptr, result_buf.size,
195 die(_("Unable to add merge result for '%s'"), path);
196 ce = make_cache_entry(create_ce_mode(active_cache[pos+1]->ce_mode),
200 die(_("make_cache_entry failed for path '%s'"), path);
201 status = checkout_entry(ce, state, NULL);
205 static int checkout_paths(struct tree *source_tree, const char **pathspec,
206 const char *prefix, struct checkout_opts *opts)
209 struct checkout state;
210 static char *ps_matched;
211 unsigned char rev[20];
215 int stage = opts->writeout_stage;
216 int merge = opts->merge;
218 struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
220 newfd = hold_locked_index(lock_file, 1);
221 if (read_cache_preload(pathspec) < 0)
222 return error(_("corrupt index file"));
225 read_tree_some(source_tree, pathspec);
227 for (pos = 0; pathspec[pos]; pos++)
229 ps_matched = xcalloc(1, pos);
231 for (pos = 0; pos < active_nr; pos++) {
232 struct cache_entry *ce = active_cache[pos];
233 if (source_tree && !(ce->ce_flags & CE_UPDATE))
235 match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, ps_matched);
238 if (report_path_error(ps_matched, pathspec, prefix))
241 /* "checkout -m path" to recreate conflicted state */
243 unmerge_cache(pathspec);
245 /* Any unmerged paths? */
246 for (pos = 0; pos < active_nr; pos++) {
247 struct cache_entry *ce = active_cache[pos];
248 if (match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, NULL)) {
252 warning(_("path '%s' is unmerged"), ce->name);
254 errs |= check_stage(stage, ce, pos);
255 } else if (opts->merge) {
256 errs |= check_all_stages(ce, pos);
259 error(_("path '%s' is unmerged"), ce->name);
261 pos = skip_same_name(ce, pos) - 1;
267 /* Now we are committed to check them out */
268 memset(&state, 0, sizeof(state));
270 state.refresh_cache = 1;
271 for (pos = 0; pos < active_nr; pos++) {
272 struct cache_entry *ce = active_cache[pos];
273 if (source_tree && !(ce->ce_flags & CE_UPDATE))
275 if (match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, NULL)) {
277 errs |= checkout_entry(ce, &state, NULL);
281 errs |= checkout_stage(stage, ce, pos, &state);
283 errs |= checkout_merged(pos, &state);
284 pos = skip_same_name(ce, pos) - 1;
288 if (write_cache(newfd, active_cache, active_nr) ||
289 commit_locked_index(lock_file))
290 die(_("unable to write new index file"));
292 read_ref_full("HEAD", rev, 0, &flag);
293 head = lookup_commit_reference_gently(rev, 1);
295 errs |= post_checkout_hook(head, head, 0);
299 static void show_local_changes(struct object *head, struct diff_options *opts)
302 /* I think we want full paths, even if we're in a subdirectory. */
303 init_revisions(&rev, NULL);
304 rev.diffopt.flags = opts->flags;
305 rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS;
306 if (diff_setup_done(&rev.diffopt) < 0)
307 die(_("diff_setup_done failed"));
308 add_pending_object(&rev, head, NULL);
309 run_diff_index(&rev, 0);
312 static void describe_detached_head(const char *msg, struct commit *commit)
314 struct strbuf sb = STRBUF_INIT;
315 parse_commit(commit);
316 pp_commit_easy(CMIT_FMT_ONELINE, commit, &sb);
317 fprintf(stderr, "%s %s... %s\n", msg,
318 find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV), sb.buf);
322 static int reset_tree(struct tree *tree, struct checkout_opts *o, int worktree)
324 struct unpack_trees_options opts;
325 struct tree_desc tree_desc;
327 memset(&opts, 0, sizeof(opts));
329 opts.update = worktree;
330 opts.skip_unmerged = !worktree;
333 opts.fn = oneway_merge;
334 opts.verbose_update = !o->quiet;
335 opts.src_index = &the_index;
336 opts.dst_index = &the_index;
338 init_tree_desc(&tree_desc, tree->buffer, tree->size);
339 switch (unpack_trees(1, &tree_desc, &opts)) {
341 o->writeout_error = 1;
343 * We return 0 nevertheless, as the index is all right
344 * and more importantly we have made best efforts to
345 * update paths in the work tree, and we cannot revert
356 const char *name; /* The short name used */
357 const char *path; /* The full name of a real branch */
358 struct commit *commit; /* The named commit */
361 static void setup_branch_path(struct branch_info *branch)
363 struct strbuf buf = STRBUF_INIT;
365 strbuf_branchname(&buf, branch->name);
366 if (strcmp(buf.buf, branch->name))
367 branch->name = xstrdup(buf.buf);
368 strbuf_splice(&buf, 0, 0, "refs/heads/", 11);
369 branch->path = strbuf_detach(&buf, NULL);
372 static int merge_working_tree(struct checkout_opts *opts,
373 struct branch_info *old, struct branch_info *new)
376 struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
377 int newfd = hold_locked_index(lock_file, 1);
379 if (read_cache_preload(NULL) < 0)
380 return error(_("corrupt index file"));
382 resolve_undo_clear();
384 ret = reset_tree(new->commit->tree, opts, 1);
388 struct tree_desc trees[2];
390 struct unpack_trees_options topts;
392 memset(&topts, 0, sizeof(topts));
394 topts.src_index = &the_index;
395 topts.dst_index = &the_index;
397 setup_unpack_trees_porcelain(&topts, "checkout");
399 refresh_cache(REFRESH_QUIET);
401 if (unmerged_cache()) {
402 error(_("you need to resolve your current index first"));
406 /* 2-way merge to the new branch */
407 topts.initial_checkout = is_cache_unborn();
410 topts.gently = opts->merge && old->commit;
411 topts.verbose_update = !opts->quiet;
412 topts.fn = twoway_merge;
413 if (opts->overwrite_ignore) {
414 topts.dir = xcalloc(1, sizeof(*topts.dir));
415 topts.dir->flags |= DIR_SHOW_IGNORED;
416 setup_standard_excludes(topts.dir);
418 tree = parse_tree_indirect(old->commit ?
419 old->commit->object.sha1 :
420 EMPTY_TREE_SHA1_BIN);
421 init_tree_desc(&trees[0], tree->buffer, tree->size);
422 tree = parse_tree_indirect(new->commit->object.sha1);
423 init_tree_desc(&trees[1], tree->buffer, tree->size);
425 ret = unpack_trees(2, trees, &topts);
428 * Unpack couldn't do a trivial merge; either
429 * give up or do a real merge, depending on
430 * whether the merge flag was used.
434 struct merge_options o;
439 * Without old->commit, the below is the same as
440 * the two-tree unpack we already tried and failed.
445 /* Do more real merge */
448 * We update the index fully, then write the
449 * tree from the index, then merge the new
450 * branch with the current tree, with the old
451 * branch as the base. Then we reset the index
452 * (but not the working tree) to the new
453 * branch, leaving the working tree as the
454 * merged version, but skipping unmerged
455 * entries in the index.
458 add_files_to_cache(NULL, NULL, 0);
460 * NEEDSWORK: carrying over local changes
461 * when branches have different end-of-line
462 * normalization (or clean+smudge rules) is
463 * a pain; plumb in an option to set
466 init_merge_options(&o);
468 work = write_tree_from_memory(&o);
470 ret = reset_tree(new->commit->tree, opts, 1);
473 o.ancestor = old->name;
474 o.branch1 = new->name;
476 merge_trees(&o, new->commit->tree, work,
477 old->commit->tree, &result);
478 ret = reset_tree(new->commit->tree, opts, 0);
484 if (write_cache(newfd, active_cache, active_nr) ||
485 commit_locked_index(lock_file))
486 die(_("unable to write new index file"));
488 if (!opts->force && !opts->quiet)
489 show_local_changes(&new->commit->object, &opts->diff_options);
494 static void report_tracking(struct branch_info *new)
496 struct strbuf sb = STRBUF_INIT;
497 struct branch *branch = branch_get(new->name);
499 if (!format_tracking_info(branch, &sb))
501 fputs(sb.buf, stdout);
505 static void detach_advice(const char *old_path, const char *new_name)
508 "Note: checking out '%s'.\n\n"
509 "You are in 'detached HEAD' state. You can look around, make experimental\n"
510 "changes and commit them, and you can discard any commits you make in this\n"
511 "state without impacting any branches by performing another checkout.\n\n"
512 "If you want to create a new branch to retain commits you create, you may\n"
513 "do so (now or later) by using -b with the checkout command again. Example:\n\n"
514 " git checkout -b new_branch_name\n\n";
516 fprintf(stderr, fmt, new_name);
519 static void update_refs_for_switch(struct checkout_opts *opts,
520 struct branch_info *old,
521 struct branch_info *new)
523 struct strbuf msg = STRBUF_INIT;
524 const char *old_desc;
525 if (opts->new_branch) {
526 if (opts->new_orphan_branch) {
527 if (opts->new_branch_log && !log_all_ref_updates) {
529 char log_file[PATH_MAX];
530 char *ref_name = mkpath("refs/heads/%s", opts->new_orphan_branch);
532 temp = log_all_ref_updates;
533 log_all_ref_updates = 1;
534 if (log_ref_setup(ref_name, log_file, sizeof(log_file))) {
535 fprintf(stderr, _("Can not do reflog for '%s'\n"),
536 opts->new_orphan_branch);
537 log_all_ref_updates = temp;
540 log_all_ref_updates = temp;
544 create_branch(old->name, opts->new_branch, new->name,
545 opts->new_branch_force ? 1 : 0,
546 opts->new_branch_log,
547 opts->new_branch_force ? 1 : 0,
549 new->name = opts->new_branch;
550 setup_branch_path(new);
553 old_desc = old->name;
554 if (!old_desc && old->commit)
555 old_desc = sha1_to_hex(old->commit->object.sha1);
556 strbuf_addf(&msg, "checkout: moving from %s to %s",
557 old_desc ? old_desc : "(invalid)", new->name);
559 if (!strcmp(new->name, "HEAD") && !new->path && !opts->force_detach) {
561 } else if (opts->force_detach || !new->path) { /* No longer on any branch. */
562 update_ref(msg.buf, "HEAD", new->commit->object.sha1, NULL,
563 REF_NODEREF, DIE_ON_ERR);
565 if (old->path && advice_detached_head)
566 detach_advice(old->path, new->name);
567 describe_detached_head(_("HEAD is now at"), new->commit);
569 } else if (new->path) { /* Switch branches. */
570 create_symref("HEAD", new->path, msg.buf);
572 if (old->path && !strcmp(new->path, old->path)) {
573 if (opts->new_branch_force)
574 fprintf(stderr, _("Reset branch '%s'\n"),
577 fprintf(stderr, _("Already on '%s'\n"),
579 } else if (opts->new_branch) {
580 if (opts->branch_exists)
581 fprintf(stderr, _("Switched to and reset branch '%s'\n"), new->name);
583 fprintf(stderr, _("Switched to a new branch '%s'\n"), new->name);
585 fprintf(stderr, _("Switched to branch '%s'\n"),
589 if (old->path && old->name) {
590 char log_file[PATH_MAX], ref_file[PATH_MAX];
592 git_snpath(log_file, sizeof(log_file), "logs/%s", old->path);
593 git_snpath(ref_file, sizeof(ref_file), "%s", old->path);
594 if (!file_exists(ref_file) && file_exists(log_file))
595 remove_path(log_file);
598 remove_branch_state();
599 strbuf_release(&msg);
601 (new->path || (!opts->force_detach && !strcmp(new->name, "HEAD"))))
602 report_tracking(new);
605 static int add_pending_uninteresting_ref(const char *refname,
606 const unsigned char *sha1,
607 int flags, void *cb_data)
609 add_pending_sha1(cb_data, refname, sha1, flags | UNINTERESTING);
613 static void describe_one_orphan(struct strbuf *sb, struct commit *commit)
615 parse_commit(commit);
616 strbuf_addstr(sb, " ");
618 find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV));
619 strbuf_addch(sb, ' ');
620 pp_commit_easy(CMIT_FMT_ONELINE, commit, sb);
621 strbuf_addch(sb, '\n');
624 #define ORPHAN_CUTOFF 4
625 static void suggest_reattach(struct commit *commit, struct rev_info *revs)
627 struct commit *c, *last = NULL;
628 struct strbuf sb = STRBUF_INIT;
630 while ((c = get_revision(revs)) != NULL) {
631 if (lost < ORPHAN_CUTOFF)
632 describe_one_orphan(&sb, c);
636 if (ORPHAN_CUTOFF < lost) {
637 int more = lost - ORPHAN_CUTOFF;
639 describe_one_orphan(&sb, last);
641 strbuf_addf(&sb, _(" ... and %d more.\n"), more);
646 /* The singular version */
647 "Warning: you are leaving %d commit behind, "
649 "any of your branches:\n\n"
651 /* The plural version */
652 "Warning: you are leaving %d commits behind, "
654 "any of your branches:\n\n"
656 /* Give ngettext() the count */
662 if (advice_detached_head)
665 "If you want to keep them by creating a new branch, "
666 "this may be a good time\nto do so with:\n\n"
667 " git branch new_branch_name %s\n\n"),
668 sha1_to_hex(commit->object.sha1));
672 * We are about to leave commit that was at the tip of a detached
673 * HEAD. If it is not reachable from any ref, this is the last chance
674 * for the user to do so without resorting to reflog.
676 static void orphaned_commit_warning(struct commit *commit)
678 struct rev_info revs;
679 struct object *object = &commit->object;
680 struct object_array refs;
682 init_revisions(&revs, NULL);
683 setup_revisions(0, NULL, &revs, NULL);
685 object->flags &= ~UNINTERESTING;
686 add_pending_object(&revs, object, sha1_to_hex(object->sha1));
688 for_each_ref(add_pending_uninteresting_ref, &revs);
691 revs.leak_pending = 1;
693 if (prepare_revision_walk(&revs))
694 die(_("internal error in revision walk"));
695 if (!(commit->object.flags & UNINTERESTING))
696 suggest_reattach(commit, &revs);
698 describe_detached_head(_("Previous HEAD position was"), commit);
700 clear_commit_marks_for_object_array(&refs, ALL_REV_FLAGS);
704 static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
707 struct branch_info old;
708 unsigned char rev[20];
710 memset(&old, 0, sizeof(old));
711 old.path = resolve_ref("HEAD", rev, 0, &flag);
713 old.path = xstrdup(old.path);
714 old.commit = lookup_commit_reference_gently(rev, 1);
715 if (!(flag & REF_ISSYMREF)) {
716 free((char *)old.path);
720 if (old.path && !prefixcmp(old.path, "refs/heads/"))
721 old.name = old.path + strlen("refs/heads/");
725 new->commit = old.commit;
727 die(_("You are on a branch yet to be born"));
728 parse_commit(new->commit);
731 ret = merge_working_tree(opts, &old, new);
735 if (!opts->quiet && !old.path && old.commit && new->commit != old.commit)
736 orphaned_commit_warning(old.commit);
738 update_refs_for_switch(opts, &old, new);
740 ret = post_checkout_hook(old.commit, new->commit, 1);
741 free((char *)old.path);
742 return ret || opts->writeout_error;
745 static int git_checkout_config(const char *var, const char *value, void *cb)
747 if (!strcmp(var, "diff.ignoresubmodules")) {
748 struct checkout_opts *opts = cb;
749 handle_ignore_submodules_arg(&opts->diff_options, value);
753 if (!prefixcmp(var, "submodule."))
754 return parse_submodule_config_option(var, value);
756 return git_xmerge_config(var, value, NULL);
759 static int interactive_checkout(const char *revision, const char **pathspec,
760 struct checkout_opts *opts)
762 return run_add_interactive(revision, "--patch=checkout", pathspec);
765 struct tracking_name_data {
771 static int check_tracking_name(const char *refname, const unsigned char *sha1,
772 int flags, void *cb_data)
774 struct tracking_name_data *cb = cb_data;
777 if (prefixcmp(refname, "refs/remotes/"))
779 slash = strchr(refname + 13, '/');
780 if (!slash || strcmp(slash + 1, cb->name))
786 cb->remote = xstrdup(refname);
790 static const char *unique_tracking_name(const char *name)
792 struct tracking_name_data cb_data = { NULL, NULL, 1 };
794 for_each_ref(check_tracking_name, &cb_data);
796 return cb_data.remote;
797 free(cb_data.remote);
801 static int parse_branchname_arg(int argc, const char **argv,
802 int dwim_new_local_branch_ok,
803 struct branch_info *new,
804 struct tree **source_tree,
805 unsigned char rev[20],
806 const char **new_branch)
809 unsigned char branch_rev[20];
814 * case 1: git checkout <ref> -- [<paths>]
816 * <ref> must be a valid tree, everything after the '--' must be
819 * case 2: git checkout -- [<paths>]
821 * everything after the '--' must be paths.
823 * case 3: git checkout <something> [<paths>]
825 * With no paths, if <something> is a commit, that is to
826 * switch to the branch or detach HEAD at it. As a special case,
827 * if <something> is A...B (missing A or B means HEAD but you can
828 * omit at most one side), and if there is a unique merge base
829 * between A and B, A...B names that merge base.
831 * With no paths, if <something> is _not_ a commit, no -t nor -b
832 * was given, and there is a tracking branch whose name is
833 * <something> in one and only one remote, then this is a short-hand
834 * to fork local <something> from that remote-tracking branch.
836 * Otherwise <something> shall not be ambiguous.
837 * - If it's *only* a reference, treat it like case (1).
838 * - If it's only a path, treat it like case (2).
845 if (!strcmp(argv[0], "--")) /* case (2) */
849 has_dash_dash = (argc > 1) && !strcmp(argv[1], "--");
851 if (!strcmp(arg, "-"))
854 if (get_sha1_mb(arg, rev)) {
855 if (has_dash_dash) /* case (1) */
856 die(_("invalid reference: %s"), arg);
857 if (dwim_new_local_branch_ok &&
858 !check_filename(NULL, arg) &&
860 const char *remote = unique_tracking_name(arg);
861 if (!remote || get_sha1(remote, rev))
865 /* DWIMmed to create local branch */
871 /* we can't end up being in (2) anymore, eat the argument */
877 setup_branch_path(new);
879 if (!check_refname_format(new->path, 0) &&
880 !read_ref(new->path, branch_rev))
881 hashcpy(rev, branch_rev);
883 new->path = NULL; /* not an existing branch */
885 new->commit = lookup_commit_reference_gently(rev, 1);
888 *source_tree = parse_tree_indirect(rev);
890 parse_commit(new->commit);
891 *source_tree = new->commit->tree;
894 if (!*source_tree) /* case (1): want a tree */
895 die(_("reference is not a tree: %s"), arg);
896 if (!has_dash_dash) {/* case (3 -> 1) */
898 * Do not complain the most common case
899 * git checkout branch
900 * even if there happen to be a file called 'branch';
901 * it would be extremely annoying.
904 verify_non_filename(NULL, arg);
914 int cmd_checkout(int argc, const char **argv, const char *prefix)
916 struct checkout_opts opts;
917 unsigned char rev[20];
918 struct branch_info new;
919 struct tree *source_tree = NULL;
920 char *conflict_style = NULL;
922 int dwim_new_local_branch = 1;
923 struct option options[] = {
924 OPT__QUIET(&opts.quiet, "suppress progress reporting"),
925 OPT_STRING('b', NULL, &opts.new_branch, "branch",
926 "create and checkout a new branch"),
927 OPT_STRING('B', NULL, &opts.new_branch_force, "branch",
928 "create/reset and checkout a branch"),
929 OPT_BOOLEAN('l', NULL, &opts.new_branch_log, "create reflog for new branch"),
930 OPT_BOOLEAN(0, "detach", &opts.force_detach, "detach the HEAD at named commit"),
931 OPT_SET_INT('t', "track", &opts.track, "set upstream info for new branch",
932 BRANCH_TRACK_EXPLICIT),
933 OPT_STRING(0, "orphan", &opts.new_orphan_branch, "new branch", "new unparented branch"),
934 OPT_SET_INT('2', "ours", &opts.writeout_stage, "checkout our version for unmerged files",
936 OPT_SET_INT('3', "theirs", &opts.writeout_stage, "checkout their version for unmerged files",
938 OPT__FORCE(&opts.force, "force checkout (throw away local modifications)"),
939 OPT_BOOLEAN('m', "merge", &opts.merge, "perform a 3-way merge with the new branch"),
940 OPT_BOOLEAN(0, "overwrite-ignore", &opts.overwrite_ignore, "update ignored files (default)"),
941 OPT_STRING(0, "conflict", &conflict_style, "style",
942 "conflict style (merge or diff3)"),
943 OPT_BOOLEAN('p', "patch", &patch_mode, "select hunks interactively"),
944 { OPTION_BOOLEAN, 0, "guess", &dwim_new_local_branch, NULL,
945 "second guess 'git checkout no-such-branch'",
946 PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },
950 memset(&opts, 0, sizeof(opts));
951 memset(&new, 0, sizeof(new));
952 opts.overwrite_ignore = 1;
955 git_config(git_checkout_config, &opts);
957 opts.track = BRANCH_TRACK_UNSPECIFIED;
959 argc = parse_options(argc, argv, prefix, options, checkout_usage,
960 PARSE_OPT_KEEP_DASHDASH);
962 /* we can assume from now on new_branch = !new_branch_force */
963 if (opts.new_branch && opts.new_branch_force)
964 die(_("-B cannot be used with -b"));
966 /* copy -B over to -b, so that we can just check the latter */
967 if (opts.new_branch_force)
968 opts.new_branch = opts.new_branch_force;
970 if (patch_mode && (opts.track > 0 || opts.new_branch
971 || opts.new_branch_log || opts.merge || opts.force
972 || opts.force_detach))
973 die (_("--patch is incompatible with all other options"));
975 if (opts.force_detach && (opts.new_branch || opts.new_orphan_branch))
976 die(_("--detach cannot be used with -b/-B/--orphan"));
977 if (opts.force_detach && 0 < opts.track)
978 die(_("--detach cannot be used with -t"));
980 /* --track without -b should DWIM */
981 if (0 < opts.track && !opts.new_branch) {
982 const char *argv0 = argv[0];
983 if (!argc || !strcmp(argv0, "--"))
984 die (_("--track needs a branch name"));
985 if (!prefixcmp(argv0, "refs/"))
987 if (!prefixcmp(argv0, "remotes/"))
989 argv0 = strchr(argv0, '/');
990 if (!argv0 || !argv0[1])
991 die (_("Missing branch name; try -b"));
992 opts.new_branch = argv0 + 1;
995 if (opts.new_orphan_branch) {
997 die(_("--orphan and -b|-B are mutually exclusive"));
999 die(_("--orphan cannot be used with -t"));
1000 opts.new_branch = opts.new_orphan_branch;
1003 if (conflict_style) {
1004 opts.merge = 1; /* implied */
1005 git_xmerge_config("merge.conflictstyle", conflict_style, NULL);
1008 if (opts.force && opts.merge)
1009 die(_("git checkout: -f and -m are incompatible"));
1012 * Extract branch name from command line arguments, so
1013 * all that is left is pathspecs.
1017 * 1) git checkout <tree> -- [<paths>]
1018 * 2) git checkout -- [<paths>]
1019 * 3) git checkout <something> [<paths>]
1021 * including "last branch" syntax and DWIM-ery for names of
1022 * remote branches, erroring out for invalid or ambiguous cases.
1027 dwim_new_local_branch &&
1028 opts.track == BRANCH_TRACK_UNSPECIFIED &&
1030 int n = parse_branchname_arg(argc, argv, dwim_ok,
1031 &new, &source_tree, rev, &opts.new_branch);
1036 if (opts.track == BRANCH_TRACK_UNSPECIFIED)
1037 opts.track = git_branch_track;
1040 const char **pathspec = get_pathspec(prefix, argv);
1043 die(_("invalid path specification"));
1046 return interactive_checkout(new.name, pathspec, &opts);
1048 /* Checkout paths */
1049 if (opts.new_branch) {
1051 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]);
1053 die(_("git checkout: updating paths is incompatible with switching branches."));
1057 if (opts.force_detach)
1058 die(_("git checkout: --detach does not take a path argument"));
1060 if (1 < !!opts.writeout_stage + !!opts.force + !!opts.merge)
1061 die(_("git checkout: --ours/--theirs, --force and --merge are incompatible when\nchecking out of the index."));
1063 return checkout_paths(source_tree, pathspec, prefix, &opts);
1067 return interactive_checkout(new.name, NULL, &opts);
1069 if (opts.new_branch) {
1070 struct strbuf buf = STRBUF_INIT;
1072 opts.branch_exists = validate_new_branchname(opts.new_branch, &buf,
1073 !!opts.new_branch_force,
1074 !!opts.new_branch_force);
1076 strbuf_release(&buf);
1079 if (new.name && !new.commit) {
1080 die(_("Cannot switch branch to a non-commit."));
1082 if (opts.writeout_stage)
1083 die(_("--ours/--theirs is incompatible with switching branches."));
1085 return switch_branches(&opts, &new);