checkout: forbid "-B <branch>" from touching a branch used elsewhere
"git checkout -B <branch> [<start-point>]", being a "forced" version of "-b", switches to the <branch>, after optionally resetting its tip to the <start-point>, even if the <branch> is in use in another worktree, which is somewhat unexpected. Protect the <branch> using the same logic that forbids "git checkout <branch>" from touching a branch that is in use elsewhere. This is a breaking change that may deserve backward compatibliity warning in the Release Notes. The "--ignore-other-worktrees" option can be used as an escape hatch if the finger memory of existing users depend on the current behaviour of "-B". Reported-by: Willem Verstraeten <willem.verstraeten@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
@ -63,7 +63,9 @@ $ git checkout <branch>
|
||||
------------
|
||||
+
|
||||
that is to say, the branch is not reset/created unless "git checkout" is
|
||||
successful.
|
||||
successful (e.g., when the branch is in use in another worktree, not
|
||||
just the current branch stays the same, but the branch is not reset to
|
||||
the start-point, either).
|
||||
|
||||
'git checkout' --detach [<branch>]::
|
||||
'git checkout' [--detach] <commit>::
|
||||
|
@ -59,13 +59,18 @@ out at most one of `A` and `B`, in which case it defaults to `HEAD`.
|
||||
-c <new-branch>::
|
||||
--create <new-branch>::
|
||||
Create a new branch named `<new-branch>` starting at
|
||||
`<start-point>` before switching to the branch. This is a
|
||||
convenient shortcut for:
|
||||
`<start-point>` before switching to the branch. This is the
|
||||
transactional equivalent of
|
||||
+
|
||||
------------
|
||||
$ git branch <new-branch>
|
||||
$ git switch <new-branch>
|
||||
------------
|
||||
+
|
||||
that is to say, the branch is not reset/created unless "git switch" is
|
||||
successful (e.g., when the branch is in use in another worktree, not
|
||||
just the current branch stays the same, but the branch is not reset to
|
||||
the start-point, either).
|
||||
|
||||
-C <new-branch>::
|
||||
--force-create <new-branch>::
|
||||
|
Reference in New Issue
Block a user