提交 c925fe23 编写于 作者: J Junio C Hamano

Revert "checkout: retire --ignore-other-worktrees in favor of --force"

This reverts commit 0d1a1517.

When trying to switch to a different branch, that happens to be
checked out in another working tree, the user shouldn't have to
give up the other safety measures (like protecting the local changes
that overlap the difference between the branches) while defeating
the "no two checkouts of the same branch" safety.
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 0d1a1517
......@@ -111,9 +111,6 @@ OPTIONS
+
When checking out paths from the index, do not fail upon unmerged
entries; instead, unmerged entries are ignored.
+
By default, checking out a branch already checked out in another worktree
is disallowed. This overrides that safeguard.
--ours::
--theirs::
......@@ -228,6 +225,12 @@ This means that you can use `git checkout -p` to selectively discard
edits from your current working tree. See the ``Interactive Mode''
section of linkgit:git-add[1] to learn how to operate the `--patch` mode.
--ignore-other-worktrees::
`git checkout` refuses when the wanted ref is already checked
out by another worktree. This option makes it check the ref
out anyway. In other words, the ref can be held by more than one
worktree.
<branch>::
Branch to checkout; if it refers to a branch (i.e., a name that,
when prepended with "refs/heads/", is a valid ref), then that
......
......@@ -35,6 +35,7 @@ struct checkout_opts {
int writeout_stage;
int overwrite_ignore;
int ignore_skipworktree;
int ignore_other_worktrees;
const char *new_branch;
const char *new_branch_force;
......@@ -902,8 +903,7 @@ static void check_linked_checkout(struct branch_info *new, const char *id)
strbuf_rtrim(&gitdir);
} else
strbuf_addstr(&gitdir, get_git_common_dir());
die(_("'%s' is already checked out at '%s'; use --force to override"),
new->name, gitdir.buf);
die(_("'%s' is already checked out at '%s'"), new->name, gitdir.buf);
done:
strbuf_release(&path);
strbuf_release(&sb);
......@@ -1151,7 +1151,7 @@ static int checkout_branch(struct checkout_opts *opts,
char *head_ref = resolve_refdup("HEAD", 0, sha1, &flag);
if (head_ref &&
(!(flag & REF_ISSYMREF) || strcmp(head_ref, new->path)) &&
!opts->force)
!opts->ignore_other_worktrees)
check_linked_checkouts(new);
free(head_ref);
}
......@@ -1198,6 +1198,8 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
N_("do not limit pathspecs to sparse entries only")),
OPT_HIDDEN_BOOL(0, "guess", &dwim_new_local_branch,
N_("second guess 'git checkout no-such-branch'")),
OPT_BOOL(0, "ignore-other-worktrees", &opts.ignore_other_worktrees,
N_("do not check if another worktree is holding the given ref")),
OPT_END(),
};
......
......@@ -303,7 +303,7 @@ static int add(int ac, const char **av, const char *prefix)
argv_array_push(&cmd, "checkout");
if (force)
argv_array_push(&cmd, "--force");
argv_array_push(&cmd, "--ignore-other-worktrees");
if (new_branch)
argv_array_pushl(&cmd, "-b", new_branch, NULL);
if (new_branch_force)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册