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"
22 static const char * const checkout_usage
[] = {
23 "git checkout [options] <branch>",
24 "git checkout [options] [<branch>] -- <file>...",
28 struct checkout_opts
{
35 /* not set by parse_options */
38 const char *new_branch
;
39 const char *new_branch_force
;
40 const char *new_orphan_branch
;
42 enum branch_track track
;
45 static int post_checkout_hook(struct commit
*old
, struct commit
*new,
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
57 static int update_some(const unsigned char *sha1
, const char *base
, int baselen
,
58 const char *pathname
, unsigned mode
, int stage
, void *context
)
61 struct cache_entry
*ce
;
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
);
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.
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
))
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
)
104 return error("path '%s' does not have %s version",
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",
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
);
131 return error("path '%s' does not have %s version",
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
;
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);
162 if (status
< 0 || !result_buf
.ptr
) {
163 free(result_buf
.ptr
);
164 return error("path '%s': cannot merge", path
);
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
,
181 die("Unable to add merge result for '%s'", path
);
182 ce
= make_cache_entry(create_ce_mode(active_cache
[pos
+1]->ce_mode
),
186 die("make_cache_entry failed for path '%s'", path
);
187 status
= checkout_entry(ce
, state
, NULL
);
191 static int checkout_paths(struct tree
*source_tree
, const char **pathspec
,
192 struct checkout_opts
*opts
)
195 struct checkout state
;
196 static char *ps_matched
;
197 unsigned char rev
[20];
201 int stage
= opts
->writeout_stage
;
202 int merge
= opts
->merge
;
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");
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))
225 /* "checkout -m path" to recreate conflicted state */
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
)) {
236 warning("path '%s' is unmerged", ce
->name
);
238 errs
|= check_stage(stage
, ce
, pos
);
239 } else if (opts
->merge
) {
240 errs
|= check_all_stages(ce
, pos
);
243 error("path '%s' is unmerged", ce
->name
);
245 pos
= skip_same_name(ce
, pos
) - 1;
251 /* Now we are committed to check them out */
252 memset(&state
, 0, sizeof(state
));
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
)) {
259 errs
|= checkout_entry(ce
, &state
, NULL
);
263 errs
|= checkout_stage(stage
, ce
, pos
, &state
);
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);
281 static void show_local_changes(struct object
*head
)
284 /* I think we want full paths, even if we're in a subdirectory. */
285 init_revisions(&rev
, NULL
);
286 rev
.diffopt
.output_format
|= DIFF_FORMAT_NAME_STATUS
;
287 if (diff_setup_done(&rev
.diffopt
) < 0)
288 die("diff_setup_done failed");
289 add_pending_object(&rev
, head
, NULL
);
290 run_diff_index(&rev
, 0);
293 static void describe_detached_head(char *msg
, struct commit
*commit
)
295 struct strbuf sb
= STRBUF_INIT
;
296 struct pretty_print_context ctx
= {0};
297 parse_commit(commit
);
298 pretty_print_commit(CMIT_FMT_ONELINE
, commit
, &sb
, &ctx
);
299 fprintf(stderr
, "%s %s... %s\n", msg
,
300 find_unique_abbrev(commit
->object
.sha1
, DEFAULT_ABBREV
), sb
.buf
);
304 static int reset_tree(struct tree
*tree
, struct checkout_opts
*o
, int worktree
)
306 struct unpack_trees_options opts
;
307 struct tree_desc tree_desc
;
309 memset(&opts
, 0, sizeof(opts
));
311 opts
.update
= worktree
;
312 opts
.skip_unmerged
= !worktree
;
315 opts
.fn
= oneway_merge
;
316 opts
.verbose_update
= !o
->quiet
;
317 opts
.src_index
= &the_index
;
318 opts
.dst_index
= &the_index
;
320 init_tree_desc(&tree_desc
, tree
->buffer
, tree
->size
);
321 switch (unpack_trees(1, &tree_desc
, &opts
)) {
323 o
->writeout_error
= 1;
325 * We return 0 nevertheless, as the index is all right
326 * and more importantly we have made best efforts to
327 * update paths in the work tree, and we cannot revert
338 const char *name
; /* The short name used */
339 const char *path
; /* The full name of a real branch */
340 struct commit
*commit
; /* The named commit */
343 static void setup_branch_path(struct branch_info
*branch
)
345 struct strbuf buf
= STRBUF_INIT
;
347 strbuf_branchname(&buf
, branch
->name
);
348 if (strcmp(buf
.buf
, branch
->name
))
349 branch
->name
= xstrdup(buf
.buf
);
350 strbuf_splice(&buf
, 0, 0, "refs/heads/", 11);
351 branch
->path
= strbuf_detach(&buf
, NULL
);
354 static int merge_working_tree(struct checkout_opts
*opts
,
355 struct branch_info
*old
, struct branch_info
*new)
358 struct lock_file
*lock_file
= xcalloc(1, sizeof(struct lock_file
));
359 int newfd
= hold_locked_index(lock_file
, 1);
361 if (read_cache_preload(NULL
) < 0)
362 return error("corrupt index file");
364 resolve_undo_clear();
366 ret
= reset_tree(new->commit
->tree
, opts
, 1);
370 struct tree_desc trees
[2];
372 struct unpack_trees_options topts
;
374 memset(&topts
, 0, sizeof(topts
));
376 topts
.src_index
= &the_index
;
377 topts
.dst_index
= &the_index
;
379 set_porcelain_error_msgs(topts
.msgs
, "checkout");
381 refresh_cache(REFRESH_QUIET
);
383 if (unmerged_cache()) {
384 error("you need to resolve your current index first");
388 /* 2-way merge to the new branch */
389 topts
.initial_checkout
= is_cache_unborn();
392 topts
.gently
= opts
->merge
&& old
->commit
;
393 topts
.verbose_update
= !opts
->quiet
;
394 topts
.fn
= twoway_merge
;
395 topts
.dir
= xcalloc(1, sizeof(*topts
.dir
));
396 topts
.dir
->flags
|= DIR_SHOW_IGNORED
;
397 topts
.dir
->exclude_per_dir
= ".gitignore";
398 topts
.show_all_errors
= 1;
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
);
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.
415 struct merge_options o
;
420 * Without old->commit, the below is the same as
421 * the two-tree unpack we already tried and failed.
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
);
442 work
= write_tree_from_memory(&o
);
444 ret
= reset_tree(new->commit
->tree
, opts
, 1);
447 o
.ancestor
= old
->name
;
448 o
.branch1
= new->name
;
450 merge_trees(&o
, new->commit
->tree
, work
,
451 old
->commit
->tree
, &result
);
452 ret
= reset_tree(new->commit
->tree
, opts
, 0);
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
);
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
))
475 fputs(sb
.buf
, stdout
);
479 static void detach_advice(const char *old_path
, const char *new_name
)
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
) {
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
;
514 log_all_ref_updates
= temp
;
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
);
532 create_symref("HEAD", new->path
, msg
.buf
);
534 if (old
->path
&& !strcmp(new->path
, old
->path
))
535 fprintf(stderr
, "Already on '%s'\n",
537 else if (opts
->new_branch
)
538 fprintf(stderr
, "Switched to%s branch '%s'\n",
539 opts
->branch_exists
? " and reset" : " a new",
542 fprintf(stderr
, "Switched to branch '%s'\n",
545 if (old
->path
&& old
->name
) {
546 char log_file
[PATH_MAX
], ref_file
[PATH_MAX
];
548 git_snpath(log_file
, sizeof(log_file
), "logs/%s", old
->path
);
549 git_snpath(ref_file
, sizeof(ref_file
), "%s", old
->path
);
550 if (!file_exists(ref_file
) && file_exists(log_file
))
551 remove_path(log_file
);
553 } else if (strcmp(new->name
, "HEAD")) {
554 update_ref(msg
.buf
, "HEAD", new->commit
->object
.sha1
, NULL
,
555 REF_NODEREF
, DIE_ON_ERR
);
557 if (old
->path
&& advice_detached_head
)
558 detach_advice(old
->path
, new->name
);
559 describe_detached_head("HEAD is now at", new->commit
);
562 remove_branch_state();
563 strbuf_release(&msg
);
564 if (!opts
->quiet
&& (new->path
|| !strcmp(new->name
, "HEAD")))
565 report_tracking(new);
568 static int switch_branches(struct checkout_opts
*opts
, struct branch_info
*new)
571 struct branch_info old
;
572 unsigned char rev
[20];
574 memset(&old
, 0, sizeof(old
));
575 old
.path
= resolve_ref("HEAD", rev
, 0, &flag
);
576 old
.commit
= lookup_commit_reference_gently(rev
, 1);
577 if (!(flag
& REF_ISSYMREF
))
580 if (old
.path
&& !prefixcmp(old
.path
, "refs/heads/"))
581 old
.name
= old
.path
+ strlen("refs/heads/");
585 new->commit
= old
.commit
;
587 die("You are on a branch yet to be born");
588 parse_commit(new->commit
);
591 ret
= merge_working_tree(opts
, &old
, new);
596 * If we were on a detached HEAD, but have now moved to
597 * a new commit, we want to mention the old commit once more
598 * to remind the user that it might be lost.
600 if (!opts
->quiet
&& !old
.path
&& old
.commit
&& new->commit
!= old
.commit
)
601 describe_detached_head("Previous HEAD position was", old
.commit
);
603 update_refs_for_switch(opts
, &old
, new);
605 ret
= post_checkout_hook(old
.commit
, new->commit
, 1);
606 return ret
|| opts
->writeout_error
;
609 static int git_checkout_config(const char *var
, const char *value
, void *cb
)
611 return git_xmerge_config(var
, value
, cb
);
614 static int interactive_checkout(const char *revision
, const char **pathspec
,
615 struct checkout_opts
*opts
)
617 return run_add_interactive(revision
, "--patch=checkout", pathspec
);
620 struct tracking_name_data
{
626 static int check_tracking_name(const char *refname
, const unsigned char *sha1
,
627 int flags
, void *cb_data
)
629 struct tracking_name_data
*cb
= cb_data
;
632 if (prefixcmp(refname
, "refs/remotes/"))
634 slash
= strchr(refname
+ 13, '/');
635 if (!slash
|| strcmp(slash
+ 1, cb
->name
))
641 cb
->remote
= xstrdup(refname
);
645 static const char *unique_tracking_name(const char *name
)
647 struct tracking_name_data cb_data
= { NULL
, NULL
, 1 };
649 for_each_ref(check_tracking_name
, &cb_data
);
651 return cb_data
.remote
;
652 free(cb_data
.remote
);
656 int cmd_checkout(int argc
, const char **argv
, const char *prefix
)
658 struct checkout_opts opts
;
659 unsigned char rev
[20];
661 struct branch_info
new;
662 struct tree
*source_tree
= NULL
;
663 char *conflict_style
= NULL
;
665 int dwim_new_local_branch
= 1;
666 struct option options
[] = {
667 OPT__QUIET(&opts
.quiet
),
668 OPT_STRING('b', NULL
, &opts
.new_branch
, "branch",
669 "create and checkout a new branch"),
670 OPT_STRING('B', NULL
, &opts
.new_branch_force
, "branch",
671 "create/reset and checkout a branch"),
672 OPT_BOOLEAN('l', NULL
, &opts
.new_branch_log
, "log for new branch"),
673 OPT_SET_INT('t', "track", &opts
.track
, "track",
674 BRANCH_TRACK_EXPLICIT
),
675 OPT_STRING(0, "orphan", &opts
.new_orphan_branch
, "new branch", "new unparented branch"),
676 OPT_SET_INT('2', "ours", &opts
.writeout_stage
, "stage",
678 OPT_SET_INT('3', "theirs", &opts
.writeout_stage
, "stage",
680 OPT_BOOLEAN('f', "force", &opts
.force
, "force"),
681 OPT_BOOLEAN('m', "merge", &opts
.merge
, "merge"),
682 OPT_STRING(0, "conflict", &conflict_style
, "style",
683 "conflict style (merge or diff3)"),
684 OPT_BOOLEAN('p', "patch", &patch_mode
, "select hunks interactively"),
685 { OPTION_BOOLEAN
, 0, "guess", &dwim_new_local_branch
, NULL
,
686 "second guess 'git checkout no-such-branch'",
687 PARSE_OPT_NOARG
| PARSE_OPT_HIDDEN
},
692 memset(&opts
, 0, sizeof(opts
));
693 memset(&new, 0, sizeof(new));
695 git_config(git_checkout_config
, NULL
);
697 opts
.track
= BRANCH_TRACK_UNSPECIFIED
;
699 argc
= parse_options(argc
, argv
, prefix
, options
, checkout_usage
,
700 PARSE_OPT_KEEP_DASHDASH
);
702 /* we can assume from now on new_branch = !new_branch_force */
703 if (opts
.new_branch
&& opts
.new_branch_force
)
704 die("-B cannot be used with -b");
706 /* copy -B over to -b, so that we can just check the latter */
707 if (opts
.new_branch_force
)
708 opts
.new_branch
= opts
.new_branch_force
;
710 if (patch_mode
&& (opts
.track
> 0 || opts
.new_branch
711 || opts
.new_branch_log
|| opts
.merge
|| opts
.force
))
712 die ("--patch is incompatible with all other options");
714 /* --track without -b should DWIM */
715 if (0 < opts
.track
&& !opts
.new_branch
) {
716 const char *argv0
= argv
[0];
717 if (!argc
|| !strcmp(argv0
, "--"))
718 die ("--track needs a branch name");
719 if (!prefixcmp(argv0
, "refs/"))
721 if (!prefixcmp(argv0
, "remotes/"))
723 argv0
= strchr(argv0
, '/');
724 if (!argv0
|| !argv0
[1])
725 die ("Missing branch name; try -b");
726 opts
.new_branch
= argv0
+ 1;
729 if (opts
.new_orphan_branch
) {
731 die("--orphan and -b|-B are mutually exclusive");
733 die("--orphan cannot be used with -t");
734 opts
.new_branch
= opts
.new_orphan_branch
;
737 if (conflict_style
) {
738 opts
.merge
= 1; /* implied */
739 git_xmerge_config("merge.conflictstyle", conflict_style
, NULL
);
742 if (opts
.force
&& opts
.merge
)
743 die("git checkout: -f and -m are incompatible");
746 * case 1: git checkout <ref> -- [<paths>]
748 * <ref> must be a valid tree, everything after the '--' must be
751 * case 2: git checkout -- [<paths>]
753 * everything after the '--' must be paths.
755 * case 3: git checkout <something> [<paths>]
757 * With no paths, if <something> is a commit, that is to
758 * switch to the branch or detach HEAD at it. As a special case,
759 * if <something> is A...B (missing A or B means HEAD but you can
760 * omit at most one side), and if there is a unique merge base
761 * between A and B, A...B names that merge base.
763 * With no paths, if <something> is _not_ a commit, no -t nor -b
764 * was given, and there is a tracking branch whose name is
765 * <something> in one and only one remote, then this is a short-hand
766 * to fork local <something> from that remote tracking branch.
768 * Otherwise <something> shall not be ambiguous.
769 * - If it's *only* a reference, treat it like case (1).
770 * - If it's only a path, treat it like case (2).
775 if (!strcmp(argv
[0], "--")) { /* case (2) */
782 has_dash_dash
= (argc
> 1) && !strcmp(argv
[1], "--");
784 if (!strcmp(arg
, "-"))
787 if (get_sha1_mb(arg
, rev
)) {
788 if (has_dash_dash
) /* case (1) */
789 die("invalid reference: %s", arg
);
791 dwim_new_local_branch
&&
792 opts
.track
== BRANCH_TRACK_UNSPECIFIED
&&
794 !check_filename(NULL
, arg
) &&
796 const char *remote
= unique_tracking_name(arg
);
797 if (!remote
|| get_sha1(remote
, rev
))
799 opts
.new_branch
= arg
;
801 /* DWIMmed to create local branch */
807 /* we can't end up being in (2) anymore, eat the argument */
812 if ((new.commit
= lookup_commit_reference_gently(rev
, 1))) {
813 setup_branch_path(&new);
815 if ((check_ref_format(new.path
) == CHECK_REF_FORMAT_OK
) &&
816 resolve_ref(new.path
, rev
, 1, NULL
))
820 parse_commit(new.commit
);
821 source_tree
= new.commit
->tree
;
823 source_tree
= parse_tree_indirect(rev
);
825 if (!source_tree
) /* case (1): want a tree */
826 die("reference is not a tree: %s", arg
);
827 if (!has_dash_dash
) {/* case (3 -> 1) */
829 * Do not complain the most common case
830 * git checkout branch
831 * even if there happen to be a file called 'branch';
832 * it would be extremely annoying.
835 verify_non_filename(NULL
, arg
);
845 if (opts
.track
== BRANCH_TRACK_UNSPECIFIED
)
846 opts
.track
= git_branch_track
;
849 const char **pathspec
= get_pathspec(prefix
, argv
);
852 die("invalid path specification");
855 return interactive_checkout(new.name
, pathspec
, &opts
);
858 if (opts
.new_branch
) {
860 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]);
862 die("git checkout: updating paths is incompatible with switching branches.");
866 if (1 < !!opts
.writeout_stage
+ !!opts
.force
+ !!opts
.merge
)
867 die("git checkout: --ours/--theirs, --force and --merge are incompatible when\nchecking out of the index.");
869 return checkout_paths(source_tree
, pathspec
, &opts
);
873 return interactive_checkout(new.name
, NULL
, &opts
);
875 if (opts
.new_branch
) {
876 struct strbuf buf
= STRBUF_INIT
;
877 if (strbuf_check_branch_ref(&buf
, opts
.new_branch
))
878 die("git checkout: we do not like '%s' as a branch name.",
880 if (!get_sha1(buf
.buf
, rev
)) {
881 opts
.branch_exists
= 1;
882 if (!opts
.new_branch_force
)
883 die("git checkout: branch %s already exists",
886 strbuf_release(&buf
);
889 if (new.name
&& !new.commit
) {
890 die("Cannot switch branch to a non-commit.");
892 if (opts
.writeout_stage
)
893 die("--ours/--theirs is incompatible with switching branches.");
895 return switch_branches(&opts
, &new);