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_stages(unsigned stages
, struct cache_entry
*ce
, int pos
)
121 const char *name
= ce
->name
;
123 while (pos
< active_nr
) {
124 ce
= active_cache
[pos
];
125 if (strcmp(name
, ce
->name
))
127 seen
|= (1 << ce_stage(ce
));
130 if ((stages
& seen
) != stages
)
131 return error(_("path '%s' does not have all necessary versions"),
136 static int checkout_stage(int stage
, struct cache_entry
*ce
, int pos
,
137 struct checkout
*state
)
139 while (pos
< active_nr
&&
140 !strcmp(active_cache
[pos
]->name
, ce
->name
)) {
141 if (ce_stage(active_cache
[pos
]) == stage
)
142 return checkout_entry(active_cache
[pos
], state
, NULL
);
146 return error(_("path '%s' does not have our version"), ce
->name
);
148 return error(_("path '%s' does not have their version"), ce
->name
);
151 static int checkout_merged(int pos
, struct checkout
*state
)
153 struct cache_entry
*ce
= active_cache
[pos
];
154 const char *path
= ce
->name
;
155 mmfile_t ancestor
, ours
, theirs
;
157 unsigned char sha1
[20];
158 mmbuffer_t result_buf
;
159 unsigned char threeway
[3][20];
162 memset(threeway
, 0, sizeof(threeway
));
163 while (pos
< active_nr
) {
165 stage
= ce_stage(ce
);
166 if (!stage
|| strcmp(path
, ce
->name
))
168 hashcpy(threeway
[stage
- 1], ce
->sha1
);
170 mode
= create_ce_mode(ce
->ce_mode
);
172 ce
= active_cache
[pos
];
174 if (is_null_sha1(threeway
[1]) || is_null_sha1(threeway
[2]))
175 return error(_("path '%s' does not have necessary versions"), path
);
177 read_mmblob(&ancestor
, threeway
[0]);
178 read_mmblob(&ours
, threeway
[1]);
179 read_mmblob(&theirs
, threeway
[2]);
182 * NEEDSWORK: re-create conflicts from merges with
183 * merge.renormalize set, too
185 status
= ll_merge(&result_buf
, path
, &ancestor
, "base",
186 &ours
, "ours", &theirs
, "theirs", NULL
);
190 if (status
< 0 || !result_buf
.ptr
) {
191 free(result_buf
.ptr
);
192 return error(_("path '%s': cannot merge"), path
);
197 * There is absolutely no reason to write this as a blob object
198 * and create a phony cache entry just to leak. This hack is
199 * primarily to get to the write_entry() machinery that massages
200 * the contents to work-tree format and writes out which only
201 * allows it for a cache entry. The code in write_entry() needs
202 * to be refactored to allow us to feed a <buffer, size, mode>
203 * instead of a cache entry. Such a refactoring would help
204 * merge_recursive as well (it also writes the merge result to the
205 * object database even when it may contain conflicts).
207 if (write_sha1_file(result_buf
.ptr
, result_buf
.size
,
209 die(_("Unable to add merge result for '%s'"), path
);
210 ce
= make_cache_entry(mode
, sha1
, path
, 2, 0);
212 die(_("make_cache_entry failed for path '%s'"), path
);
213 status
= checkout_entry(ce
, state
, NULL
);
217 static int checkout_paths(struct tree
*source_tree
, const char **pathspec
,
218 const char *prefix
, struct checkout_opts
*opts
)
221 struct checkout state
;
222 static char *ps_matched
;
223 unsigned char rev
[20];
227 int stage
= opts
->writeout_stage
;
228 int merge
= opts
->merge
;
230 struct lock_file
*lock_file
= xcalloc(1, sizeof(struct lock_file
));
232 newfd
= hold_locked_index(lock_file
, 1);
233 if (read_cache_preload(pathspec
) < 0)
234 return error(_("corrupt index file"));
237 read_tree_some(source_tree
, pathspec
);
239 for (pos
= 0; pathspec
[pos
]; pos
++)
241 ps_matched
= xcalloc(1, pos
);
243 for (pos
= 0; pos
< active_nr
; pos
++) {
244 struct cache_entry
*ce
= active_cache
[pos
];
245 if (source_tree
&& !(ce
->ce_flags
& CE_UPDATE
))
247 match_pathspec(pathspec
, ce
->name
, ce_namelen(ce
), 0, ps_matched
);
250 if (report_path_error(ps_matched
, pathspec
, prefix
))
253 /* "checkout -m path" to recreate conflicted state */
255 unmerge_cache(pathspec
);
257 /* Any unmerged paths? */
258 for (pos
= 0; pos
< active_nr
; pos
++) {
259 struct cache_entry
*ce
= active_cache
[pos
];
260 if (match_pathspec(pathspec
, ce
->name
, ce_namelen(ce
), 0, NULL
)) {
264 warning(_("path '%s' is unmerged"), ce
->name
);
266 errs
|= check_stage(stage
, ce
, pos
);
267 } else if (opts
->merge
) {
268 errs
|= check_stages((1<<2) | (1<<3), ce
, pos
);
271 error(_("path '%s' is unmerged"), ce
->name
);
273 pos
= skip_same_name(ce
, pos
) - 1;
279 /* Now we are committed to check them out */
280 memset(&state
, 0, sizeof(state
));
282 state
.refresh_cache
= 1;
283 for (pos
= 0; pos
< active_nr
; pos
++) {
284 struct cache_entry
*ce
= active_cache
[pos
];
285 if (source_tree
&& !(ce
->ce_flags
& CE_UPDATE
))
287 if (match_pathspec(pathspec
, ce
->name
, ce_namelen(ce
), 0, NULL
)) {
289 errs
|= checkout_entry(ce
, &state
, NULL
);
293 errs
|= checkout_stage(stage
, ce
, pos
, &state
);
295 errs
|= checkout_merged(pos
, &state
);
296 pos
= skip_same_name(ce
, pos
) - 1;
300 if (write_cache(newfd
, active_cache
, active_nr
) ||
301 commit_locked_index(lock_file
))
302 die(_("unable to write new index file"));
304 read_ref_full("HEAD", rev
, 0, &flag
);
305 head
= lookup_commit_reference_gently(rev
, 1);
307 errs
|= post_checkout_hook(head
, head
, 0);
311 static void show_local_changes(struct object
*head
, struct diff_options
*opts
)
314 /* I think we want full paths, even if we're in a subdirectory. */
315 init_revisions(&rev
, NULL
);
316 rev
.diffopt
.flags
= opts
->flags
;
317 rev
.diffopt
.output_format
|= DIFF_FORMAT_NAME_STATUS
;
318 if (diff_setup_done(&rev
.diffopt
) < 0)
319 die(_("diff_setup_done failed"));
320 add_pending_object(&rev
, head
, NULL
);
321 run_diff_index(&rev
, 0);
324 static void describe_detached_head(const char *msg
, struct commit
*commit
)
326 struct strbuf sb
= STRBUF_INIT
;
327 parse_commit(commit
);
328 pp_commit_easy(CMIT_FMT_ONELINE
, commit
, &sb
);
329 fprintf(stderr
, "%s %s... %s\n", msg
,
330 find_unique_abbrev(commit
->object
.sha1
, DEFAULT_ABBREV
), sb
.buf
);
334 static int reset_tree(struct tree
*tree
, struct checkout_opts
*o
, int worktree
)
336 struct unpack_trees_options opts
;
337 struct tree_desc tree_desc
;
339 memset(&opts
, 0, sizeof(opts
));
341 opts
.update
= worktree
;
342 opts
.skip_unmerged
= !worktree
;
345 opts
.fn
= oneway_merge
;
346 opts
.verbose_update
= !o
->quiet
;
347 opts
.src_index
= &the_index
;
348 opts
.dst_index
= &the_index
;
350 init_tree_desc(&tree_desc
, tree
->buffer
, tree
->size
);
351 switch (unpack_trees(1, &tree_desc
, &opts
)) {
353 o
->writeout_error
= 1;
355 * We return 0 nevertheless, as the index is all right
356 * and more importantly we have made best efforts to
357 * update paths in the work tree, and we cannot revert
368 const char *name
; /* The short name used */
369 const char *path
; /* The full name of a real branch */
370 struct commit
*commit
; /* The named commit */
373 static void setup_branch_path(struct branch_info
*branch
)
375 struct strbuf buf
= STRBUF_INIT
;
377 strbuf_branchname(&buf
, branch
->name
);
378 if (strcmp(buf
.buf
, branch
->name
))
379 branch
->name
= xstrdup(buf
.buf
);
380 strbuf_splice(&buf
, 0, 0, "refs/heads/", 11);
381 branch
->path
= strbuf_detach(&buf
, NULL
);
384 static int merge_working_tree(struct checkout_opts
*opts
,
385 struct branch_info
*old
, struct branch_info
*new)
388 struct lock_file
*lock_file
= xcalloc(1, sizeof(struct lock_file
));
389 int newfd
= hold_locked_index(lock_file
, 1);
391 if (read_cache_preload(NULL
) < 0)
392 return error(_("corrupt index file"));
394 resolve_undo_clear();
396 ret
= reset_tree(new->commit
->tree
, opts
, 1);
400 struct tree_desc trees
[2];
402 struct unpack_trees_options topts
;
404 memset(&topts
, 0, sizeof(topts
));
406 topts
.src_index
= &the_index
;
407 topts
.dst_index
= &the_index
;
409 setup_unpack_trees_porcelain(&topts
, "checkout");
411 refresh_cache(REFRESH_QUIET
);
413 if (unmerged_cache()) {
414 error(_("you need to resolve your current index first"));
418 /* 2-way merge to the new branch */
419 topts
.initial_checkout
= is_cache_unborn();
422 topts
.gently
= opts
->merge
&& old
->commit
;
423 topts
.verbose_update
= !opts
->quiet
;
424 topts
.fn
= twoway_merge
;
425 if (opts
->overwrite_ignore
) {
426 topts
.dir
= xcalloc(1, sizeof(*topts
.dir
));
427 topts
.dir
->flags
|= DIR_SHOW_IGNORED
;
428 setup_standard_excludes(topts
.dir
);
430 tree
= parse_tree_indirect(old
->commit
?
431 old
->commit
->object
.sha1
:
432 EMPTY_TREE_SHA1_BIN
);
433 init_tree_desc(&trees
[0], tree
->buffer
, tree
->size
);
434 tree
= parse_tree_indirect(new->commit
->object
.sha1
);
435 init_tree_desc(&trees
[1], tree
->buffer
, tree
->size
);
437 ret
= unpack_trees(2, trees
, &topts
);
440 * Unpack couldn't do a trivial merge; either
441 * give up or do a real merge, depending on
442 * whether the merge flag was used.
446 struct merge_options o
;
451 * Without old->commit, the below is the same as
452 * the two-tree unpack we already tried and failed.
457 /* Do more real merge */
460 * We update the index fully, then write the
461 * tree from the index, then merge the new
462 * branch with the current tree, with the old
463 * branch as the base. Then we reset the index
464 * (but not the working tree) to the new
465 * branch, leaving the working tree as the
466 * merged version, but skipping unmerged
467 * entries in the index.
470 add_files_to_cache(NULL
, NULL
, 0);
472 * NEEDSWORK: carrying over local changes
473 * when branches have different end-of-line
474 * normalization (or clean+smudge rules) is
475 * a pain; plumb in an option to set
478 init_merge_options(&o
);
480 work
= write_tree_from_memory(&o
);
482 ret
= reset_tree(new->commit
->tree
, opts
, 1);
485 o
.ancestor
= old
->name
;
486 o
.branch1
= new->name
;
488 merge_trees(&o
, new->commit
->tree
, work
,
489 old
->commit
->tree
, &result
);
490 ret
= reset_tree(new->commit
->tree
, opts
, 0);
496 if (write_cache(newfd
, active_cache
, active_nr
) ||
497 commit_locked_index(lock_file
))
498 die(_("unable to write new index file"));
500 if (!opts
->force
&& !opts
->quiet
)
501 show_local_changes(&new->commit
->object
, &opts
->diff_options
);
506 static void report_tracking(struct branch_info
*new)
508 struct strbuf sb
= STRBUF_INIT
;
509 struct branch
*branch
= branch_get(new->name
);
511 if (!format_tracking_info(branch
, &sb
))
513 fputs(sb
.buf
, stdout
);
517 static void detach_advice(const char *old_path
, const char *new_name
)
520 "Note: checking out '%s'.\n\n"
521 "You are in 'detached HEAD' state. You can look around, make experimental\n"
522 "changes and commit them, and you can discard any commits you make in this\n"
523 "state without impacting any branches by performing another checkout.\n\n"
524 "If you want to create a new branch to retain commits you create, you may\n"
525 "do so (now or later) by using -b with the checkout command again. Example:\n\n"
526 " git checkout -b new_branch_name\n\n";
528 fprintf(stderr
, fmt
, new_name
);
531 static void update_refs_for_switch(struct checkout_opts
*opts
,
532 struct branch_info
*old
,
533 struct branch_info
*new)
535 struct strbuf msg
= STRBUF_INIT
;
536 const char *old_desc
;
537 if (opts
->new_branch
) {
538 if (opts
->new_orphan_branch
) {
539 if (opts
->new_branch_log
&& !log_all_ref_updates
) {
541 char log_file
[PATH_MAX
];
542 char *ref_name
= mkpath("refs/heads/%s", opts
->new_orphan_branch
);
544 temp
= log_all_ref_updates
;
545 log_all_ref_updates
= 1;
546 if (log_ref_setup(ref_name
, log_file
, sizeof(log_file
))) {
547 fprintf(stderr
, _("Can not do reflog for '%s'\n"),
548 opts
->new_orphan_branch
);
549 log_all_ref_updates
= temp
;
552 log_all_ref_updates
= temp
;
556 create_branch(old
->name
, opts
->new_branch
, new->name
,
557 opts
->new_branch_force
? 1 : 0,
558 opts
->new_branch_log
,
559 opts
->new_branch_force
? 1 : 0,
561 new->name
= opts
->new_branch
;
562 setup_branch_path(new);
565 old_desc
= old
->name
;
566 if (!old_desc
&& old
->commit
)
567 old_desc
= sha1_to_hex(old
->commit
->object
.sha1
);
568 strbuf_addf(&msg
, "checkout: moving from %s to %s",
569 old_desc
? old_desc
: "(invalid)", new->name
);
571 if (!strcmp(new->name
, "HEAD") && !new->path
&& !opts
->force_detach
) {
573 } else if (opts
->force_detach
|| !new->path
) { /* No longer on any branch. */
574 update_ref(msg
.buf
, "HEAD", new->commit
->object
.sha1
, NULL
,
575 REF_NODEREF
, DIE_ON_ERR
);
577 if (old
->path
&& advice_detached_head
)
578 detach_advice(old
->path
, new->name
);
579 describe_detached_head(_("HEAD is now at"), new->commit
);
581 } else if (new->path
) { /* Switch branches. */
582 create_symref("HEAD", new->path
, msg
.buf
);
584 if (old
->path
&& !strcmp(new->path
, old
->path
)) {
585 if (opts
->new_branch_force
)
586 fprintf(stderr
, _("Reset branch '%s'\n"),
589 fprintf(stderr
, _("Already on '%s'\n"),
591 } else if (opts
->new_branch
) {
592 if (opts
->branch_exists
)
593 fprintf(stderr
, _("Switched to and reset branch '%s'\n"), new->name
);
595 fprintf(stderr
, _("Switched to a new branch '%s'\n"), new->name
);
597 fprintf(stderr
, _("Switched to branch '%s'\n"),
601 if (old
->path
&& old
->name
) {
602 char log_file
[PATH_MAX
], ref_file
[PATH_MAX
];
604 git_snpath(log_file
, sizeof(log_file
), "logs/%s", old
->path
);
605 git_snpath(ref_file
, sizeof(ref_file
), "%s", old
->path
);
606 if (!file_exists(ref_file
) && file_exists(log_file
))
607 remove_path(log_file
);
610 remove_branch_state();
611 strbuf_release(&msg
);
613 (new->path
|| (!opts
->force_detach
&& !strcmp(new->name
, "HEAD"))))
614 report_tracking(new);
617 static int add_pending_uninteresting_ref(const char *refname
,
618 const unsigned char *sha1
,
619 int flags
, void *cb_data
)
621 add_pending_sha1(cb_data
, refname
, sha1
, flags
| UNINTERESTING
);
625 static void describe_one_orphan(struct strbuf
*sb
, struct commit
*commit
)
627 parse_commit(commit
);
628 strbuf_addstr(sb
, " ");
630 find_unique_abbrev(commit
->object
.sha1
, DEFAULT_ABBREV
));
631 strbuf_addch(sb
, ' ');
632 pp_commit_easy(CMIT_FMT_ONELINE
, commit
, sb
);
633 strbuf_addch(sb
, '\n');
636 #define ORPHAN_CUTOFF 4
637 static void suggest_reattach(struct commit
*commit
, struct rev_info
*revs
)
639 struct commit
*c
, *last
= NULL
;
640 struct strbuf sb
= STRBUF_INIT
;
642 while ((c
= get_revision(revs
)) != NULL
) {
643 if (lost
< ORPHAN_CUTOFF
)
644 describe_one_orphan(&sb
, c
);
648 if (ORPHAN_CUTOFF
< lost
) {
649 int more
= lost
- ORPHAN_CUTOFF
;
651 describe_one_orphan(&sb
, last
);
653 strbuf_addf(&sb
, _(" ... and %d more.\n"), more
);
658 /* The singular version */
659 "Warning: you are leaving %d commit behind, "
661 "any of your branches:\n\n"
663 /* The plural version */
664 "Warning: you are leaving %d commits behind, "
666 "any of your branches:\n\n"
668 /* Give ngettext() the count */
674 if (advice_detached_head
)
677 "If you want to keep them by creating a new branch, "
678 "this may be a good time\nto do so with:\n\n"
679 " git branch new_branch_name %s\n\n"),
680 sha1_to_hex(commit
->object
.sha1
));
684 * We are about to leave commit that was at the tip of a detached
685 * HEAD. If it is not reachable from any ref, this is the last chance
686 * for the user to do so without resorting to reflog.
688 static void orphaned_commit_warning(struct commit
*commit
)
690 struct rev_info revs
;
691 struct object
*object
= &commit
->object
;
692 struct object_array refs
;
694 init_revisions(&revs
, NULL
);
695 setup_revisions(0, NULL
, &revs
, NULL
);
697 object
->flags
&= ~UNINTERESTING
;
698 add_pending_object(&revs
, object
, sha1_to_hex(object
->sha1
));
700 for_each_ref(add_pending_uninteresting_ref
, &revs
);
703 revs
.leak_pending
= 1;
705 if (prepare_revision_walk(&revs
))
706 die(_("internal error in revision walk"));
707 if (!(commit
->object
.flags
& UNINTERESTING
))
708 suggest_reattach(commit
, &revs
);
710 describe_detached_head(_("Previous HEAD position was"), commit
);
712 clear_commit_marks_for_object_array(&refs
, ALL_REV_FLAGS
);
716 static int switch_branches(struct checkout_opts
*opts
, struct branch_info
*new)
719 struct branch_info old
;
721 unsigned char rev
[20];
723 memset(&old
, 0, sizeof(old
));
724 old
.path
= path_to_free
= resolve_refdup("HEAD", rev
, 0, &flag
);
725 old
.commit
= lookup_commit_reference_gently(rev
, 1);
726 if (!(flag
& REF_ISSYMREF
))
729 if (old
.path
&& !prefixcmp(old
.path
, "refs/heads/"))
730 old
.name
= old
.path
+ strlen("refs/heads/");
734 new->commit
= old
.commit
;
736 die(_("You are on a branch yet to be born"));
737 parse_commit(new->commit
);
740 ret
= merge_working_tree(opts
, &old
, new);
746 if (!opts
->quiet
&& !old
.path
&& old
.commit
&& new->commit
!= old
.commit
)
747 orphaned_commit_warning(old
.commit
);
749 update_refs_for_switch(opts
, &old
, new);
751 ret
= post_checkout_hook(old
.commit
, new->commit
, 1);
753 return ret
|| opts
->writeout_error
;
756 static int git_checkout_config(const char *var
, const char *value
, void *cb
)
758 if (!strcmp(var
, "diff.ignoresubmodules")) {
759 struct checkout_opts
*opts
= cb
;
760 handle_ignore_submodules_arg(&opts
->diff_options
, value
);
764 if (!prefixcmp(var
, "submodule."))
765 return parse_submodule_config_option(var
, value
);
767 return git_xmerge_config(var
, value
, NULL
);
770 static int interactive_checkout(const char *revision
, const char **pathspec
,
771 struct checkout_opts
*opts
)
773 return run_add_interactive(revision
, "--patch=checkout", pathspec
);
776 struct tracking_name_data
{
782 static int check_tracking_name(const char *refname
, const unsigned char *sha1
,
783 int flags
, void *cb_data
)
785 struct tracking_name_data
*cb
= cb_data
;
788 if (prefixcmp(refname
, "refs/remotes/"))
790 slash
= strchr(refname
+ 13, '/');
791 if (!slash
|| strcmp(slash
+ 1, cb
->name
))
797 cb
->remote
= xstrdup(refname
);
801 static const char *unique_tracking_name(const char *name
)
803 struct tracking_name_data cb_data
= { NULL
, NULL
, 1 };
805 for_each_ref(check_tracking_name
, &cb_data
);
807 return cb_data
.remote
;
808 free(cb_data
.remote
);
812 static int parse_branchname_arg(int argc
, const char **argv
,
813 int dwim_new_local_branch_ok
,
814 struct branch_info
*new,
815 struct tree
**source_tree
,
816 unsigned char rev
[20],
817 const char **new_branch
)
820 unsigned char branch_rev
[20];
825 * case 1: git checkout <ref> -- [<paths>]
827 * <ref> must be a valid tree, everything after the '--' must be
830 * case 2: git checkout -- [<paths>]
832 * everything after the '--' must be paths.
834 * case 3: git checkout <something> [<paths>]
836 * With no paths, if <something> is a commit, that is to
837 * switch to the branch or detach HEAD at it. As a special case,
838 * if <something> is A...B (missing A or B means HEAD but you can
839 * omit at most one side), and if there is a unique merge base
840 * between A and B, A...B names that merge base.
842 * With no paths, if <something> is _not_ a commit, no -t nor -b
843 * was given, and there is a tracking branch whose name is
844 * <something> in one and only one remote, then this is a short-hand
845 * to fork local <something> from that remote-tracking branch.
847 * Otherwise <something> shall not be ambiguous.
848 * - If it's *only* a reference, treat it like case (1).
849 * - If it's only a path, treat it like case (2).
856 if (!strcmp(argv
[0], "--")) /* case (2) */
860 has_dash_dash
= (argc
> 1) && !strcmp(argv
[1], "--");
862 if (!strcmp(arg
, "-"))
865 if (get_sha1_mb(arg
, rev
)) {
866 if (has_dash_dash
) /* case (1) */
867 die(_("invalid reference: %s"), arg
);
868 if (dwim_new_local_branch_ok
&&
869 !check_filename(NULL
, arg
) &&
871 const char *remote
= unique_tracking_name(arg
);
872 if (!remote
|| get_sha1(remote
, rev
))
876 /* DWIMmed to create local branch */
882 /* we can't end up being in (2) anymore, eat the argument */
888 setup_branch_path(new);
890 if (!check_refname_format(new->path
, 0) &&
891 !read_ref(new->path
, branch_rev
))
892 hashcpy(rev
, branch_rev
);
894 new->path
= NULL
; /* not an existing branch */
896 new->commit
= lookup_commit_reference_gently(rev
, 1);
899 *source_tree
= parse_tree_indirect(rev
);
901 parse_commit(new->commit
);
902 *source_tree
= new->commit
->tree
;
905 if (!*source_tree
) /* case (1): want a tree */
906 die(_("reference is not a tree: %s"), arg
);
907 if (!has_dash_dash
) {/* case (3 -> 1) */
909 * Do not complain the most common case
910 * git checkout branch
911 * even if there happen to be a file called 'branch';
912 * it would be extremely annoying.
915 verify_non_filename(NULL
, arg
);
925 int cmd_checkout(int argc
, const char **argv
, const char *prefix
)
927 struct checkout_opts opts
;
928 unsigned char rev
[20];
929 struct branch_info
new;
930 struct tree
*source_tree
= NULL
;
931 char *conflict_style
= NULL
;
933 int dwim_new_local_branch
= 1;
934 struct option options
[] = {
935 OPT__QUIET(&opts
.quiet
, "suppress progress reporting"),
936 OPT_STRING('b', NULL
, &opts
.new_branch
, "branch",
937 "create and checkout a new branch"),
938 OPT_STRING('B', NULL
, &opts
.new_branch_force
, "branch",
939 "create/reset and checkout a branch"),
940 OPT_BOOLEAN('l', NULL
, &opts
.new_branch_log
, "create reflog for new branch"),
941 OPT_BOOLEAN(0, "detach", &opts
.force_detach
, "detach the HEAD at named commit"),
942 OPT_SET_INT('t', "track", &opts
.track
, "set upstream info for new branch",
943 BRANCH_TRACK_EXPLICIT
),
944 OPT_STRING(0, "orphan", &opts
.new_orphan_branch
, "new branch", "new unparented branch"),
945 OPT_SET_INT('2', "ours", &opts
.writeout_stage
, "checkout our version for unmerged files",
947 OPT_SET_INT('3', "theirs", &opts
.writeout_stage
, "checkout their version for unmerged files",
949 OPT__FORCE(&opts
.force
, "force checkout (throw away local modifications)"),
950 OPT_BOOLEAN('m', "merge", &opts
.merge
, "perform a 3-way merge with the new branch"),
951 OPT_BOOLEAN(0, "overwrite-ignore", &opts
.overwrite_ignore
, "update ignored files (default)"),
952 OPT_STRING(0, "conflict", &conflict_style
, "style",
953 "conflict style (merge or diff3)"),
954 OPT_BOOLEAN('p', "patch", &patch_mode
, "select hunks interactively"),
955 { OPTION_BOOLEAN
, 0, "guess", &dwim_new_local_branch
, NULL
,
956 "second guess 'git checkout no-such-branch'",
957 PARSE_OPT_NOARG
| PARSE_OPT_HIDDEN
},
961 memset(&opts
, 0, sizeof(opts
));
962 memset(&new, 0, sizeof(new));
963 opts
.overwrite_ignore
= 1;
966 git_config(git_checkout_config
, &opts
);
968 opts
.track
= BRANCH_TRACK_UNSPECIFIED
;
970 argc
= parse_options(argc
, argv
, prefix
, options
, checkout_usage
,
971 PARSE_OPT_KEEP_DASHDASH
);
973 /* we can assume from now on new_branch = !new_branch_force */
974 if (opts
.new_branch
&& opts
.new_branch_force
)
975 die(_("-B cannot be used with -b"));
977 /* copy -B over to -b, so that we can just check the latter */
978 if (opts
.new_branch_force
)
979 opts
.new_branch
= opts
.new_branch_force
;
981 if (patch_mode
&& (opts
.track
> 0 || opts
.new_branch
982 || opts
.new_branch_log
|| opts
.merge
|| opts
.force
983 || opts
.force_detach
))
984 die (_("--patch is incompatible with all other options"));
986 if (opts
.force_detach
&& (opts
.new_branch
|| opts
.new_orphan_branch
))
987 die(_("--detach cannot be used with -b/-B/--orphan"));
988 if (opts
.force_detach
&& 0 < opts
.track
)
989 die(_("--detach cannot be used with -t"));
991 /* --track without -b should DWIM */
992 if (0 < opts
.track
&& !opts
.new_branch
) {
993 const char *argv0
= argv
[0];
994 if (!argc
|| !strcmp(argv0
, "--"))
995 die (_("--track needs a branch name"));
996 if (!prefixcmp(argv0
, "refs/"))
998 if (!prefixcmp(argv0
, "remotes/"))
1000 argv0
= strchr(argv0
, '/');
1001 if (!argv0
|| !argv0
[1])
1002 die (_("Missing branch name; try -b"));
1003 opts
.new_branch
= argv0
+ 1;
1006 if (opts
.new_orphan_branch
) {
1007 if (opts
.new_branch
)
1008 die(_("--orphan and -b|-B are mutually exclusive"));
1010 die(_("--orphan cannot be used with -t"));
1011 opts
.new_branch
= opts
.new_orphan_branch
;
1014 if (conflict_style
) {
1015 opts
.merge
= 1; /* implied */
1016 git_xmerge_config("merge.conflictstyle", conflict_style
, NULL
);
1019 if (opts
.force
&& opts
.merge
)
1020 die(_("git checkout: -f and -m are incompatible"));
1023 * Extract branch name from command line arguments, so
1024 * all that is left is pathspecs.
1028 * 1) git checkout <tree> -- [<paths>]
1029 * 2) git checkout -- [<paths>]
1030 * 3) git checkout <something> [<paths>]
1032 * including "last branch" syntax and DWIM-ery for names of
1033 * remote branches, erroring out for invalid or ambiguous cases.
1038 dwim_new_local_branch
&&
1039 opts
.track
== BRANCH_TRACK_UNSPECIFIED
&&
1041 int n
= parse_branchname_arg(argc
, argv
, dwim_ok
,
1042 &new, &source_tree
, rev
, &opts
.new_branch
);
1047 if (opts
.track
== BRANCH_TRACK_UNSPECIFIED
)
1048 opts
.track
= git_branch_track
;
1051 const char **pathspec
= get_pathspec(prefix
, argv
);
1054 die(_("invalid path specification"));
1057 return interactive_checkout(new.name
, pathspec
, &opts
);
1059 /* Checkout paths */
1060 if (opts
.new_branch
) {
1062 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]);
1064 die(_("git checkout: updating paths is incompatible with switching branches."));
1068 if (opts
.force_detach
)
1069 die(_("git checkout: --detach does not take a path argument"));
1071 if (1 < !!opts
.writeout_stage
+ !!opts
.force
+ !!opts
.merge
)
1072 die(_("git checkout: --ours/--theirs, --force and --merge are incompatible when\nchecking out of the index."));
1074 return checkout_paths(source_tree
, pathspec
, prefix
, &opts
);
1078 return interactive_checkout(new.name
, NULL
, &opts
);
1080 if (opts
.new_branch
) {
1081 struct strbuf buf
= STRBUF_INIT
;
1083 opts
.branch_exists
= validate_new_branchname(opts
.new_branch
, &buf
,
1084 !!opts
.new_branch_force
,
1085 !!opts
.new_branch_force
);
1087 strbuf_release(&buf
);
1090 if (new.name
&& !new.commit
) {
1091 die(_("Cannot switch branch to a non-commit."));
1093 if (opts
.writeout_stage
)
1094 die(_("--ours/--theirs is incompatible with switching branches."));
1096 return switch_branches(&opts
, &new);