Merge branch 'jn/merge-renormalize'
[git/jnareb-git.git] / builtin / checkout.c
blobff5ac1e0ff20ad8e5b30289cd3f24f0c64eb0627
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);
158 * NEEDSWORK: re-create conflicts from merges with
159 * merge.renormalize set, too
161 status = ll_merge(&result_buf, path, &ancestor, "base",
162 &ours, "ours", &theirs, "theirs", 0);
163 free(ancestor.ptr);
164 free(ours.ptr);
165 free(theirs.ptr);
166 if (status < 0 || !result_buf.ptr) {
167 free(result_buf.ptr);
168 return error("path '%s': cannot merge", path);
172 * NEEDSWORK:
173 * There is absolutely no reason to write this as a blob object
174 * and create a phony cache entry just to leak. This hack is
175 * primarily to get to the write_entry() machinery that massages
176 * the contents to work-tree format and writes out which only
177 * allows it for a cache entry. The code in write_entry() needs
178 * to be refactored to allow us to feed a <buffer, size, mode>
179 * instead of a cache entry. Such a refactoring would help
180 * merge_recursive as well (it also writes the merge result to the
181 * object database even when it may contain conflicts).
183 if (write_sha1_file(result_buf.ptr, result_buf.size,
184 blob_type, sha1))
185 die("Unable to add merge result for '%s'", path);
186 ce = make_cache_entry(create_ce_mode(active_cache[pos+1]->ce_mode),
187 sha1,
188 path, 2, 0);
189 if (!ce)
190 die("make_cache_entry failed for path '%s'", path);
191 status = checkout_entry(ce, state, NULL);
192 return status;
195 static int checkout_paths(struct tree *source_tree, const char **pathspec,
196 struct checkout_opts *opts)
198 int pos;
199 struct checkout state;
200 static char *ps_matched;
201 unsigned char rev[20];
202 int flag;
203 struct commit *head;
204 int errs = 0;
205 int stage = opts->writeout_stage;
206 int merge = opts->merge;
207 int newfd;
208 struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
210 newfd = hold_locked_index(lock_file, 1);
211 if (read_cache_preload(pathspec) < 0)
212 return error("corrupt index file");
214 if (source_tree)
215 read_tree_some(source_tree, pathspec);
217 for (pos = 0; pathspec[pos]; pos++)
219 ps_matched = xcalloc(1, pos);
221 for (pos = 0; pos < active_nr; pos++) {
222 struct cache_entry *ce = active_cache[pos];
223 match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, ps_matched);
226 if (report_path_error(ps_matched, pathspec, 0))
227 return 1;
229 /* "checkout -m path" to recreate conflicted state */
230 if (opts->merge)
231 unmerge_cache(pathspec);
233 /* Any unmerged paths? */
234 for (pos = 0; pos < active_nr; pos++) {
235 struct cache_entry *ce = active_cache[pos];
236 if (match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, NULL)) {
237 if (!ce_stage(ce))
238 continue;
239 if (opts->force) {
240 warning("path '%s' is unmerged", ce->name);
241 } else if (stage) {
242 errs |= check_stage(stage, ce, pos);
243 } else if (opts->merge) {
244 errs |= check_all_stages(ce, pos);
245 } else {
246 errs = 1;
247 error("path '%s' is unmerged", ce->name);
249 pos = skip_same_name(ce, pos) - 1;
252 if (errs)
253 return 1;
255 /* Now we are committed to check them out */
256 memset(&state, 0, sizeof(state));
257 state.force = 1;
258 state.refresh_cache = 1;
259 for (pos = 0; pos < active_nr; pos++) {
260 struct cache_entry *ce = active_cache[pos];
261 if (match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, NULL)) {
262 if (!ce_stage(ce)) {
263 errs |= checkout_entry(ce, &state, NULL);
264 continue;
266 if (stage)
267 errs |= checkout_stage(stage, ce, pos, &state);
268 else if (merge)
269 errs |= checkout_merged(pos, &state);
270 pos = skip_same_name(ce, pos) - 1;
274 if (write_cache(newfd, active_cache, active_nr) ||
275 commit_locked_index(lock_file))
276 die("unable to write new index file");
278 resolve_ref("HEAD", rev, 0, &flag);
279 head = lookup_commit_reference_gently(rev, 1);
281 errs |= post_checkout_hook(head, head, 0);
282 return errs;
285 static void show_local_changes(struct object *head)
287 struct rev_info rev;
288 /* I think we want full paths, even if we're in a subdirectory. */
289 init_revisions(&rev, NULL);
290 rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS;
291 if (diff_setup_done(&rev.diffopt) < 0)
292 die("diff_setup_done failed");
293 add_pending_object(&rev, head, NULL);
294 run_diff_index(&rev, 0);
297 static void describe_detached_head(char *msg, struct commit *commit)
299 struct strbuf sb = STRBUF_INIT;
300 struct pretty_print_context ctx = {0};
301 parse_commit(commit);
302 pretty_print_commit(CMIT_FMT_ONELINE, commit, &sb, &ctx);
303 fprintf(stderr, "%s %s... %s\n", msg,
304 find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV), sb.buf);
305 strbuf_release(&sb);
308 static int reset_tree(struct tree *tree, struct checkout_opts *o, int worktree)
310 struct unpack_trees_options opts;
311 struct tree_desc tree_desc;
313 memset(&opts, 0, sizeof(opts));
314 opts.head_idx = -1;
315 opts.update = worktree;
316 opts.skip_unmerged = !worktree;
317 opts.reset = 1;
318 opts.merge = 1;
319 opts.fn = oneway_merge;
320 opts.verbose_update = !o->quiet;
321 opts.src_index = &the_index;
322 opts.dst_index = &the_index;
323 parse_tree(tree);
324 init_tree_desc(&tree_desc, tree->buffer, tree->size);
325 switch (unpack_trees(1, &tree_desc, &opts)) {
326 case -2:
327 o->writeout_error = 1;
329 * We return 0 nevertheless, as the index is all right
330 * and more importantly we have made best efforts to
331 * update paths in the work tree, and we cannot revert
332 * them.
334 case 0:
335 return 0;
336 default:
337 return 128;
341 struct branch_info {
342 const char *name; /* The short name used */
343 const char *path; /* The full name of a real branch */
344 struct commit *commit; /* The named commit */
347 static void setup_branch_path(struct branch_info *branch)
349 struct strbuf buf = STRBUF_INIT;
351 strbuf_branchname(&buf, branch->name);
352 if (strcmp(buf.buf, branch->name))
353 branch->name = xstrdup(buf.buf);
354 strbuf_splice(&buf, 0, 0, "refs/heads/", 11);
355 branch->path = strbuf_detach(&buf, NULL);
358 static int merge_working_tree(struct checkout_opts *opts,
359 struct branch_info *old, struct branch_info *new)
361 int ret;
362 struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
363 int newfd = hold_locked_index(lock_file, 1);
365 if (read_cache_preload(NULL) < 0)
366 return error("corrupt index file");
368 resolve_undo_clear();
369 if (opts->force) {
370 ret = reset_tree(new->commit->tree, opts, 1);
371 if (ret)
372 return ret;
373 } else {
374 struct tree_desc trees[2];
375 struct tree *tree;
376 struct unpack_trees_options topts;
378 memset(&topts, 0, sizeof(topts));
379 topts.head_idx = -1;
380 topts.src_index = &the_index;
381 topts.dst_index = &the_index;
383 set_porcelain_error_msgs(topts.msgs, "checkout");
385 refresh_cache(REFRESH_QUIET);
387 if (unmerged_cache()) {
388 error("you need to resolve your current index first");
389 return 1;
392 /* 2-way merge to the new branch */
393 topts.initial_checkout = is_cache_unborn();
394 topts.update = 1;
395 topts.merge = 1;
396 topts.gently = opts->merge && old->commit;
397 topts.verbose_update = !opts->quiet;
398 topts.fn = twoway_merge;
399 topts.dir = xcalloc(1, sizeof(*topts.dir));
400 topts.dir->flags |= DIR_SHOW_IGNORED;
401 topts.dir->exclude_per_dir = ".gitignore";
402 topts.show_all_errors = 1;
403 tree = parse_tree_indirect(old->commit ?
404 old->commit->object.sha1 :
405 (unsigned char *)EMPTY_TREE_SHA1_BIN);
406 init_tree_desc(&trees[0], tree->buffer, tree->size);
407 tree = parse_tree_indirect(new->commit->object.sha1);
408 init_tree_desc(&trees[1], tree->buffer, tree->size);
410 ret = unpack_trees(2, trees, &topts);
411 if (ret == -1) {
413 * Unpack couldn't do a trivial merge; either
414 * give up or do a real merge, depending on
415 * whether the merge flag was used.
417 struct tree *result;
418 struct tree *work;
419 struct merge_options o;
420 if (!opts->merge)
421 return 1;
424 * Without old->commit, the below is the same as
425 * the two-tree unpack we already tried and failed.
427 if (!old->commit)
428 return 1;
430 /* Do more real merge */
433 * We update the index fully, then write the
434 * tree from the index, then merge the new
435 * branch with the current tree, with the old
436 * branch as the base. Then we reset the index
437 * (but not the working tree) to the new
438 * branch, leaving the working tree as the
439 * merged version, but skipping unmerged
440 * entries in the index.
443 add_files_to_cache(NULL, NULL, 0);
445 * NEEDSWORK: carrying over local changes
446 * when branches have different end-of-line
447 * normalization (or clean+smudge rules) is
448 * a pain; plumb in an option to set
449 * o.renormalize?
451 init_merge_options(&o);
452 o.verbosity = 0;
453 work = write_tree_from_memory(&o);
455 ret = reset_tree(new->commit->tree, opts, 1);
456 if (ret)
457 return ret;
458 o.ancestor = old->name;
459 o.branch1 = new->name;
460 o.branch2 = "local";
461 merge_trees(&o, new->commit->tree, work,
462 old->commit->tree, &result);
463 ret = reset_tree(new->commit->tree, opts, 0);
464 if (ret)
465 return ret;
469 if (write_cache(newfd, active_cache, active_nr) ||
470 commit_locked_index(lock_file))
471 die("unable to write new index file");
473 if (!opts->force && !opts->quiet)
474 show_local_changes(&new->commit->object);
476 return 0;
479 static void report_tracking(struct branch_info *new)
481 struct strbuf sb = STRBUF_INIT;
482 struct branch *branch = branch_get(new->name);
484 if (!format_tracking_info(branch, &sb))
485 return;
486 fputs(sb.buf, stdout);
487 strbuf_release(&sb);
490 static void detach_advice(const char *old_path, const char *new_name)
492 const char fmt[] =
493 "Note: checking out '%s'.\n\n"
494 "You are in 'detached HEAD' state. You can look around, make experimental\n"
495 "changes and commit them, and you can discard any commits you make in this\n"
496 "state without impacting any branches by performing another checkout.\n\n"
497 "If you want to create a new branch to retain commits you create, you may\n"
498 "do so (now or later) by using -b with the checkout command again. Example:\n\n"
499 " git checkout -b new_branch_name\n\n";
501 fprintf(stderr, fmt, new_name);
504 static void update_refs_for_switch(struct checkout_opts *opts,
505 struct branch_info *old,
506 struct branch_info *new)
508 struct strbuf msg = STRBUF_INIT;
509 const char *old_desc;
510 if (opts->new_branch) {
511 if (opts->new_orphan_branch) {
512 if (opts->new_branch_log && !log_all_ref_updates) {
513 int temp;
514 char log_file[PATH_MAX];
515 char *ref_name = mkpath("refs/heads/%s", opts->new_orphan_branch);
517 temp = log_all_ref_updates;
518 log_all_ref_updates = 1;
519 if (log_ref_setup(ref_name, log_file, sizeof(log_file))) {
520 fprintf(stderr, "Can not do reflog for '%s'\n",
521 opts->new_orphan_branch);
522 log_all_ref_updates = temp;
523 return;
525 log_all_ref_updates = temp;
528 else
529 create_branch(old->name, opts->new_branch, new->name,
530 opts->new_branch_force ? 1 : 0,
531 opts->new_branch_log, opts->track);
532 new->name = opts->new_branch;
533 setup_branch_path(new);
536 old_desc = old->name;
537 if (!old_desc && old->commit)
538 old_desc = sha1_to_hex(old->commit->object.sha1);
539 strbuf_addf(&msg, "checkout: moving from %s to %s",
540 old_desc ? old_desc : "(invalid)", new->name);
542 if (new->path) {
543 create_symref("HEAD", new->path, msg.buf);
544 if (!opts->quiet) {
545 if (old->path && !strcmp(new->path, old->path))
546 fprintf(stderr, "Already on '%s'\n",
547 new->name);
548 else if (opts->new_branch)
549 fprintf(stderr, "Switched to%s branch '%s'\n",
550 opts->branch_exists ? " and reset" : " a new",
551 new->name);
552 else
553 fprintf(stderr, "Switched to branch '%s'\n",
554 new->name);
556 if (old->path && old->name) {
557 char log_file[PATH_MAX], ref_file[PATH_MAX];
559 git_snpath(log_file, sizeof(log_file), "logs/%s", old->path);
560 git_snpath(ref_file, sizeof(ref_file), "%s", old->path);
561 if (!file_exists(ref_file) && file_exists(log_file))
562 remove_path(log_file);
564 } else if (strcmp(new->name, "HEAD")) {
565 update_ref(msg.buf, "HEAD", new->commit->object.sha1, NULL,
566 REF_NODEREF, DIE_ON_ERR);
567 if (!opts->quiet) {
568 if (old->path && advice_detached_head)
569 detach_advice(old->path, new->name);
570 describe_detached_head("HEAD is now at", new->commit);
573 remove_branch_state();
574 strbuf_release(&msg);
575 if (!opts->quiet && (new->path || !strcmp(new->name, "HEAD")))
576 report_tracking(new);
579 static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
581 int ret = 0;
582 struct branch_info old;
583 unsigned char rev[20];
584 int flag;
585 memset(&old, 0, sizeof(old));
586 old.path = resolve_ref("HEAD", rev, 0, &flag);
587 old.commit = lookup_commit_reference_gently(rev, 1);
588 if (!(flag & REF_ISSYMREF))
589 old.path = NULL;
591 if (old.path && !prefixcmp(old.path, "refs/heads/"))
592 old.name = old.path + strlen("refs/heads/");
594 if (!new->name) {
595 new->name = "HEAD";
596 new->commit = old.commit;
597 if (!new->commit)
598 die("You are on a branch yet to be born");
599 parse_commit(new->commit);
602 ret = merge_working_tree(opts, &old, new);
603 if (ret)
604 return ret;
607 * If we were on a detached HEAD, but have now moved to
608 * a new commit, we want to mention the old commit once more
609 * to remind the user that it might be lost.
611 if (!opts->quiet && !old.path && old.commit && new->commit != old.commit)
612 describe_detached_head("Previous HEAD position was", old.commit);
614 update_refs_for_switch(opts, &old, new);
616 ret = post_checkout_hook(old.commit, new->commit, 1);
617 return ret || opts->writeout_error;
620 static int git_checkout_config(const char *var, const char *value, void *cb)
622 return git_xmerge_config(var, value, cb);
625 static int interactive_checkout(const char *revision, const char **pathspec,
626 struct checkout_opts *opts)
628 return run_add_interactive(revision, "--patch=checkout", pathspec);
631 struct tracking_name_data {
632 const char *name;
633 char *remote;
634 int unique;
637 static int check_tracking_name(const char *refname, const unsigned char *sha1,
638 int flags, void *cb_data)
640 struct tracking_name_data *cb = cb_data;
641 const char *slash;
643 if (prefixcmp(refname, "refs/remotes/"))
644 return 0;
645 slash = strchr(refname + 13, '/');
646 if (!slash || strcmp(slash + 1, cb->name))
647 return 0;
648 if (cb->remote) {
649 cb->unique = 0;
650 return 0;
652 cb->remote = xstrdup(refname);
653 return 0;
656 static const char *unique_tracking_name(const char *name)
658 struct tracking_name_data cb_data = { NULL, NULL, 1 };
659 cb_data.name = name;
660 for_each_ref(check_tracking_name, &cb_data);
661 if (cb_data.unique)
662 return cb_data.remote;
663 free(cb_data.remote);
664 return NULL;
667 int cmd_checkout(int argc, const char **argv, const char *prefix)
669 struct checkout_opts opts;
670 unsigned char rev[20];
671 const char *arg;
672 struct branch_info new;
673 struct tree *source_tree = NULL;
674 char *conflict_style = NULL;
675 int patch_mode = 0;
676 int dwim_new_local_branch = 1;
677 struct option options[] = {
678 OPT__QUIET(&opts.quiet),
679 OPT_STRING('b', NULL, &opts.new_branch, "branch",
680 "create and checkout a new branch"),
681 OPT_STRING('B', NULL, &opts.new_branch_force, "branch",
682 "create/reset and checkout a branch"),
683 OPT_BOOLEAN('l', NULL, &opts.new_branch_log, "log for new branch"),
684 OPT_SET_INT('t', "track", &opts.track, "track",
685 BRANCH_TRACK_EXPLICIT),
686 OPT_STRING(0, "orphan", &opts.new_orphan_branch, "new branch", "new unparented branch"),
687 OPT_SET_INT('2', "ours", &opts.writeout_stage, "stage",
689 OPT_SET_INT('3', "theirs", &opts.writeout_stage, "stage",
691 OPT_BOOLEAN('f', "force", &opts.force, "force"),
692 OPT_BOOLEAN('m', "merge", &opts.merge, "merge"),
693 OPT_STRING(0, "conflict", &conflict_style, "style",
694 "conflict style (merge or diff3)"),
695 OPT_BOOLEAN('p', "patch", &patch_mode, "select hunks interactively"),
696 { OPTION_BOOLEAN, 0, "guess", &dwim_new_local_branch, NULL,
697 "second guess 'git checkout no-such-branch'",
698 PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },
699 OPT_END(),
701 int has_dash_dash;
703 memset(&opts, 0, sizeof(opts));
704 memset(&new, 0, sizeof(new));
706 git_config(git_checkout_config, NULL);
708 opts.track = BRANCH_TRACK_UNSPECIFIED;
710 argc = parse_options(argc, argv, prefix, options, checkout_usage,
711 PARSE_OPT_KEEP_DASHDASH);
713 /* we can assume from now on new_branch = !new_branch_force */
714 if (opts.new_branch && opts.new_branch_force)
715 die("-B cannot be used with -b");
717 /* copy -B over to -b, so that we can just check the latter */
718 if (opts.new_branch_force)
719 opts.new_branch = opts.new_branch_force;
721 if (patch_mode && (opts.track > 0 || opts.new_branch
722 || opts.new_branch_log || opts.merge || opts.force))
723 die ("--patch is incompatible with all other options");
725 /* --track without -b should DWIM */
726 if (0 < opts.track && !opts.new_branch) {
727 const char *argv0 = argv[0];
728 if (!argc || !strcmp(argv0, "--"))
729 die ("--track needs a branch name");
730 if (!prefixcmp(argv0, "refs/"))
731 argv0 += 5;
732 if (!prefixcmp(argv0, "remotes/"))
733 argv0 += 8;
734 argv0 = strchr(argv0, '/');
735 if (!argv0 || !argv0[1])
736 die ("Missing branch name; try -b");
737 opts.new_branch = argv0 + 1;
740 if (opts.new_orphan_branch) {
741 if (opts.new_branch)
742 die("--orphan and -b|-B are mutually exclusive");
743 if (opts.track > 0)
744 die("--orphan cannot be used with -t");
745 opts.new_branch = opts.new_orphan_branch;
748 if (conflict_style) {
749 opts.merge = 1; /* implied */
750 git_xmerge_config("merge.conflictstyle", conflict_style, NULL);
753 if (opts.force && opts.merge)
754 die("git checkout: -f and -m are incompatible");
757 * case 1: git checkout <ref> -- [<paths>]
759 * <ref> must be a valid tree, everything after the '--' must be
760 * a path.
762 * case 2: git checkout -- [<paths>]
764 * everything after the '--' must be paths.
766 * case 3: git checkout <something> [<paths>]
768 * With no paths, if <something> is a commit, that is to
769 * switch to the branch or detach HEAD at it. As a special case,
770 * if <something> is A...B (missing A or B means HEAD but you can
771 * omit at most one side), and if there is a unique merge base
772 * between A and B, A...B names that merge base.
774 * With no paths, if <something> is _not_ a commit, no -t nor -b
775 * was given, and there is a tracking branch whose name is
776 * <something> in one and only one remote, then this is a short-hand
777 * to fork local <something> from that remote tracking branch.
779 * Otherwise <something> shall not be ambiguous.
780 * - If it's *only* a reference, treat it like case (1).
781 * - If it's only a path, treat it like case (2).
782 * - else: fail.
785 if (argc) {
786 if (!strcmp(argv[0], "--")) { /* case (2) */
787 argv++;
788 argc--;
789 goto no_reference;
792 arg = argv[0];
793 has_dash_dash = (argc > 1) && !strcmp(argv[1], "--");
795 if (!strcmp(arg, "-"))
796 arg = "@{-1}";
798 if (get_sha1_mb(arg, rev)) {
799 if (has_dash_dash) /* case (1) */
800 die("invalid reference: %s", arg);
801 if (!patch_mode &&
802 dwim_new_local_branch &&
803 opts.track == BRANCH_TRACK_UNSPECIFIED &&
804 !opts.new_branch &&
805 !check_filename(NULL, arg) &&
806 argc == 1) {
807 const char *remote = unique_tracking_name(arg);
808 if (!remote || get_sha1(remote, rev))
809 goto no_reference;
810 opts.new_branch = arg;
811 arg = remote;
812 /* DWIMmed to create local branch */
814 else
815 goto no_reference;
818 /* we can't end up being in (2) anymore, eat the argument */
819 argv++;
820 argc--;
822 new.name = arg;
823 if ((new.commit = lookup_commit_reference_gently(rev, 1))) {
824 setup_branch_path(&new);
826 if ((check_ref_format(new.path) == CHECK_REF_FORMAT_OK) &&
827 resolve_ref(new.path, rev, 1, NULL))
829 else
830 new.path = NULL;
831 parse_commit(new.commit);
832 source_tree = new.commit->tree;
833 } else
834 source_tree = parse_tree_indirect(rev);
836 if (!source_tree) /* case (1): want a tree */
837 die("reference is not a tree: %s", arg);
838 if (!has_dash_dash) {/* case (3 -> 1) */
840 * Do not complain the most common case
841 * git checkout branch
842 * even if there happen to be a file called 'branch';
843 * it would be extremely annoying.
845 if (argc)
846 verify_non_filename(NULL, arg);
848 else {
849 argv++;
850 argc--;
854 no_reference:
856 if (opts.track == BRANCH_TRACK_UNSPECIFIED)
857 opts.track = git_branch_track;
859 if (argc) {
860 const char **pathspec = get_pathspec(prefix, argv);
862 if (!pathspec)
863 die("invalid path specification");
865 if (patch_mode)
866 return interactive_checkout(new.name, pathspec, &opts);
868 /* Checkout paths */
869 if (opts.new_branch) {
870 if (argc == 1) {
871 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]);
872 } else {
873 die("git checkout: updating paths is incompatible with switching branches.");
877 if (1 < !!opts.writeout_stage + !!opts.force + !!opts.merge)
878 die("git checkout: --ours/--theirs, --force and --merge are incompatible when\nchecking out of the index.");
880 return checkout_paths(source_tree, pathspec, &opts);
883 if (patch_mode)
884 return interactive_checkout(new.name, NULL, &opts);
886 if (opts.new_branch) {
887 struct strbuf buf = STRBUF_INIT;
888 if (strbuf_check_branch_ref(&buf, opts.new_branch))
889 die("git checkout: we do not like '%s' as a branch name.",
890 opts.new_branch);
891 if (!get_sha1(buf.buf, rev)) {
892 opts.branch_exists = 1;
893 if (!opts.new_branch_force)
894 die("git checkout: branch %s already exists",
895 opts.new_branch);
897 strbuf_release(&buf);
900 if (new.name && !new.commit) {
901 die("Cannot switch branch to a non-commit.");
903 if (opts.writeout_stage)
904 die("--ours/--theirs is incompatible with switching branches.");
906 return switch_branches(&opts, &new);