Home Explore Blog CI



git

1st chunk of `Documentation/git-switch.adoc`
e9a1446dd0d9c336c053eea160f9a291b436121221bcfbdd0000000100000fa4
git-switch(1)
=============

NAME
----
git-switch - Switch branches

SYNOPSIS
--------
[synopsis]
git switch [<options>] [--no-guess] <branch>
git switch [<options>] --detach [<start-point>]
git switch [<options>] (-c|-C) <new-branch> [<start-point>]
git switch [<options>] --orphan <new-branch>

DESCRIPTION
-----------
Switch to a specified branch. The working tree and the index are
updated to match the branch. All new commits will be added to the tip
of this branch.

Optionally a new branch could be created with either `-c`, `-C`,
automatically from a remote branch of same name (see `--guess`), or
detach the working tree from any branch with `--detach`, along with
switching.

Switching branches does not require a clean index and working tree
(i.e. no differences compared to `HEAD`). The operation is aborted
however if the operation leads to loss of local changes, unless told
otherwise with `--discard-changes` or `--merge`.

THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE.

OPTIONS
-------
_<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 `<rev-a>...<rev-b>` as a shortcut for the merge
base of _<rev-a>_ and _<rev-b>_ if there is exactly one merge base. You can leave
out at most one of _<rev-a>_ and _<rev-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 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>`::
	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
	linkgit: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 linkgit: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

Title: Git Switch Command
Summary
The git-switch command is used to switch between branches in a Git repository, creating a new branch if needed, and updating the working tree and index to match the branch, with various options for handling local changes and tracking remote branches.