<branch>
Branch to switch to.
<new-branch>
Name for the new branch.
<start-point>
The starting point for the new branch. Specifying a
<start-point>
allows you to create a branch based on some
other point in history than where HEAD currently points. (Or,
in the case of --detach
, allows you to inspect and detach
from some other point.)
You can use the @{-N}
syntax to refer to the N-th last
branch/commit switched to using "git switch" or "git
checkout" operation. You may also specify -
which is
synonymous to @{-1}
. This is often used to switch quickly
between two branches, or to undo a branch switch by mistake.
As a special case, you may use A...B
as a shortcut for the
merge base of A
and B
if there is exactly one merge base. You
can leave 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:
$ git branch <new-branch>
$ git switch <new-branch>
-C <new-branch>, --force-create <new-branch>
Similar to --create
except that if <new-branch>
already
exists, it will be reset to <start-point>
. This is a
convenient shortcut for:
$ git branch -f <new-branch>
$ git switch <new-branch>
-d, --detach
Switch to a commit for inspection and discardable
experiments. See the "DETACHED HEAD" section in
git-checkout(1) for details.
--guess, --no-guess
If <branch>
is not found but there does exist a tracking
branch in exactly one remote (call it <remote>
) with a
matching name, treat as equivalent to
$ git switch -c <branch> --track <remote>/<branch>
If the branch exists in multiple remotes and one of them is
named by the checkout.defaultRemote
configuration variable,
we'll use that one for the purposes of disambiguation, even
if the <branch>
isn't unique across all remotes. Set it to
e.g. checkout.defaultRemote=origin
to always checkout remote
branches from there if <branch>
is ambiguous but exists on
the origin remote. See also checkout.defaultRemote
in
git-config(1).
--guess
is the default behavior. Use --no-guess
to disable
it.
The default behavior can be set via the checkout.guess
configuration variable.
-f, --force
An alias for --discard-changes
.
--discard-changes
Proceed even if the index or the working tree differs from
HEAD
. Both the index and working tree are restored to match
the switching target. If --recurse-submodules
is specified,
submodule content is also restored to match the switching
target. This is used to throw away local changes.
-m, --merge
If you have local modifications to one or more files that are
different between the current branch and the branch to which
you are switching, the command refuses to switch branches in
order to preserve your modifications in context. However,
with this option, a three-way merge between the current
branch, your working tree contents, and the new branch is
done, and you will be on the new branch.
When a merge conflict happens, the index entries for
conflicting paths are left unmerged, and you need to resolve
the conflicts and mark the resolved paths with git add
(or
git rm
if the merge should result in deletion of the path).
--conflict=<style>
The same as --merge
option above, but changes the way the
conflicting hunks are presented, overriding the
merge.conflictStyle
configuration variable. Possible values
are "merge" (default) and "diff3" (in addition to what is
shown by "merge" style, shows the original contents).
-q, --quiet
Quiet, suppress feedback messages.
--progress, --no-progress
Progress status is reported on the standard error stream by
default when it is attached to a terminal, unless --quiet
is
specified. This flag enables progress reporting even if not
attached to a terminal, regardless of --quiet
.
-t, --track
When creating a new branch, set up "upstream" configuration.
-c
is implied. See --track
in git-branch(1) for details.
If no -c
option is given, the name of the new branch will be
derived from the remote-tracking branch, by looking at the
local part of the refspec configured for the corresponding
remote, and then stripping the initial part up to the "*".
This would tell us to use hack
as the local branch when
branching off of origin/hack
(or remotes/origin/hack
, or even
refs/remotes/origin/hack
). If the given name has no slash, or
the above guessing results in an empty name, the guessing is
aborted. You can explicitly give a name with -c
in such a
case.
--no-track
Do not set up "upstream" configuration, even if the
branch.autoSetupMerge
configuration variable is true.
--orphan <new-branch>
Create a new orphan branch, named <new-branch>
. All tracked
files are removed.
--ignore-other-worktrees
git switch
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.
--recurse-submodules, --no-recurse-submodules
Using --recurse-submodules
will update the content of all
active submodules according to the commit recorded in the
superproject. If nothing (or --no-recurse-submodules
) is
used, submodules working trees will not be updated. Just like
git-submodule(1), this will detach HEAD
of the submodules.