SYNOPSIS
--------
[verse]
+'git worktree add' [-f] [--detach] [-b <new-branch>] <path> [<branch>]
'git worktree prune' [-n] [-v] [--expire <expire>]
DESCRIPTION
-----------
-Manage multiple worktrees attached to the same repository. These are
-created by the command `git checkout --to`.
+Manage multiple worktrees attached to the same repository.
A git repository can support multiple working trees, allowing you to check
-out more than one branch at a time. With `git checkout --to` a new working
+out more than one branch at a time. With `git worktree add` a new working
tree is associated with the repository. This new working tree is called a
"linked working tree" as opposed to the "main working tree" prepared by "git
init" or "git clone". A repository has one main working tree (if it's not a
COMMANDS
--------
+add <path> [<branch>]::
+
+Create `<path>` and checkout `<branch>` into it. The new working directory
+is linked to the current repository, sharing everything except working
+directory specific files such as HEAD, index, etc.
++
+If `<branch>` is omitted and neither `-b` nor `-B` is used, then, as a
+convenience, a new branch based at HEAD is created automatically, as if
+`-b $(basename <path>)` was specified.
+
prune::
Prune working tree information in $GIT_DIR/worktrees.
OPTIONS
-------
+-f::
+--force::
+ By default, `add` refuses to create a new worktree when `<branch>`
+ is already checked out by another worktree. This option overrides
+ that safeguard.
+
+-b <new-branch>::
+-B <new-branch>::
+ With `add`, create a new branch named `<new-branch>` starting at
+ `<branch>`, and check out `<new-branch>` into the new worktree.
+ If `<branch>` is omitted, it defaults to HEAD.
+ By default, `-b` refuses to create a new branch if it already
+ exists. `-B` overrides this safeguard, resetting `<new-branch>` to
+ `<branch>`.
+
+--detach::
+ With `add`, detach HEAD in the new worktree. See "DETACHED HEAD" in
+ linkgit:git-checkout[1].
+
-n::
--dry-run::
With `prune`, do not remove anything; just report what it would
$GIT_DIR/worktrees directory. The private sub-directory's name is usually
the base name of the linked working tree's path, possibly appended with a
number to make it unique. For example, when `$GIT_DIR=/path/main/.git` the
-command `git checkout --to /path/other/test-next next` creates the linked
+command `git worktree add /path/other/test-next next` creates the linked
working tree in `/path/other/test-next` and also creates a
`$GIT_DIR/worktrees/test-next` directory (or `$GIT_DIR/worktrees/test-next1`
if `test-next` is already taken).
refactoring session.
------------
-$ git branch emergency-fix master
-$ git checkout --to ../temp emergency-fix
+$ git worktree add -b emergency-fix ../temp master
$ pushd ../temp
# ... hack hack hack ...
$ git commit -a -m 'emergency fix for boss'
BUGS
----
-Multiple checkout support for submodules is incomplete. It is NOT
-recommended to make multiple checkouts of a superproject.
+Multiple checkout in general is still experimental, and the support
+for submodules is incomplete. It is NOT recommended to make multiple
+checkouts of a superproject.
git-worktree could provide more automation for tasks currently
-performed manually or via other commands, such as:
+performed manually, such as:
-- `add` to create a new linked worktree
- `remove` to remove a linked worktree and its administrative files (and
warn if the worktree is dirty)
- `mv` to move or rename a worktree and update its administrative files
- `lock` to prevent automatic pruning of administrative files (for instance,
for a worktree on a portable device)
-SEE ALSO
---------
-
-linkgit:git-checkout[1]
-
GIT
---
Part of the linkgit:git[1] suite