Documentation / git-worktree.txton commit Merge branch 'ds/lazy-load-trees' (c89b6e1)
   1git-worktree(1)
   2===============
   3
   4NAME
   5----
   6git-worktree - Manage multiple working trees
   7
   8
   9SYNOPSIS
  10--------
  11[verse]
  12'git worktree add' [-f] [--detach] [--checkout] [--lock] [-b <new-branch>] <path> [<commit-ish>]
  13'git worktree list' [--porcelain]
  14'git worktree lock' [--reason <string>] <worktree>
  15'git worktree move' <worktree> <new-path>
  16'git worktree prune' [-n] [-v] [--expire <expire>]
  17'git worktree remove' [-f] <worktree>
  18'git worktree unlock' <worktree>
  19
  20DESCRIPTION
  21-----------
  22
  23Manage multiple working trees attached to the same repository.
  24
  25A git repository can support multiple working trees, allowing you to check
  26out more than one branch at a time.  With `git worktree add` a new working
  27tree is associated with the repository.  This new working tree is called a
  28"linked working tree" as opposed to the "main working tree" prepared by "git
  29init" or "git clone".  A repository has one main working tree (if it's not a
  30bare repository) and zero or more linked working trees. When you are done
  31with a linked working tree, remove it with `git worktree remove`.
  32
  33If a working tree is deleted without using `git worktree remove`, then
  34its associated administrative files, which reside in the repository
  35(see "DETAILS" below), will eventually be removed automatically (see
  36`gc.worktreePruneExpire` in linkgit:git-config[1]), or you can run
  37`git worktree prune` in the main or any linked working tree to
  38clean up any stale administrative files.
  39
  40If a linked working tree is stored on a portable device or network share
  41which is not always mounted, you can prevent its administrative files from
  42being pruned by issuing the `git worktree lock` command, optionally
  43specifying `--reason` to explain why the working tree is locked.
  44
  45COMMANDS
  46--------
  47add <path> [<commit-ish>]::
  48
  49Create `<path>` and checkout `<commit-ish>` into it. The new working directory
  50is linked to the current repository, sharing everything except working
  51directory specific files such as HEAD, index, etc. `-` may also be
  52specified as `<commit-ish>`; it is synonymous with `@{-1}`.
  53+
  54If <commit-ish> is a branch name (call it `<branch>`) and is not found,
  55and neither `-b` nor `-B` nor `--detach` are used, but there does
  56exist a tracking branch in exactly one remote (call it `<remote>`)
  57with a matching name, treat as equivalent to:
  58+
  59------------
  60$ git worktree add --track -b <branch> <path> <remote>/<branch>
  61------------
  62+
  63If `<commit-ish>` is omitted and neither `-b` nor `-B` nor `--detach` used,
  64then, as a convenience, a new branch based at HEAD is created automatically,
  65as if `-b $(basename <path>)` was specified.
  66
  67list::
  68
  69List details of each worktree.  The main worktree is listed first, followed by
  70each of the linked worktrees.  The output details include if the worktree is
  71bare, the revision currently checked out, and the branch currently checked out
  72(or 'detached HEAD' if none).
  73
  74lock::
  75
  76If a working tree is on a portable device or network share which
  77is not always mounted, lock it to prevent its administrative
  78files from being pruned automatically. This also prevents it from
  79being moved or deleted. Optionally, specify a reason for the lock
  80with `--reason`.
  81
  82move::
  83
  84Move a working tree to a new location. Note that the main working tree
  85or linked working trees containing submodules cannot be moved.
  86
  87prune::
  88
  89Prune working tree information in $GIT_DIR/worktrees.
  90
  91remove::
  92
  93Remove a working tree. Only clean working trees (no untracked files
  94and no modification in tracked files) can be removed. Unclean working
  95trees or ones with submodules can be removed with `--force`. The main
  96working tree cannot be removed.
  97
  98unlock::
  99
 100Unlock a working tree, allowing it to be pruned, moved or deleted.
 101
 102OPTIONS
 103-------
 104
 105-f::
 106--force::
 107        By default, `add` refuses to create a new working tree when
 108        `<commit-ish>` is a branch name and is already checked out by
 109        another working tree and `remove` refuses to remove an unclean
 110        working tree. This option overrides these safeguards.
 111
 112-b <new-branch>::
 113-B <new-branch>::
 114        With `add`, create a new branch named `<new-branch>` starting at
 115        `<commit-ish>`, and check out `<new-branch>` into the new working tree.
 116        If `<commit-ish>` is omitted, it defaults to HEAD.
 117        By default, `-b` refuses to create a new branch if it already
 118        exists. `-B` overrides this safeguard, resetting `<new-branch>` to
 119        `<commit-ish>`.
 120
 121--detach::
 122        With `add`, detach HEAD in the new working tree. See "DETACHED HEAD"
 123        in linkgit:git-checkout[1].
 124
 125--[no-]checkout::
 126        By default, `add` checks out `<commit-ish>`, however, `--no-checkout` can
 127        be used to suppress checkout in order to make customizations,
 128        such as configuring sparse-checkout. See "Sparse checkout"
 129        in linkgit:git-read-tree[1].
 130
 131--[no-]guess-remote::
 132        With `worktree add <path>`, without `<commit-ish>`, instead
 133        of creating a new branch from HEAD, if there exists a tracking
 134        branch in exactly one remote matching the basename of `<path>`,
 135        base the new branch on the remote-tracking branch, and mark
 136        the remote-tracking branch as "upstream" from the new branch.
 137+
 138This can also be set up as the default behaviour by using the
 139`worktree.guessRemote` config option.
 140
 141--[no-]track::
 142        When creating a new branch, if `<commit-ish>` is a branch,
 143        mark it as "upstream" from the new branch.  This is the
 144        default if `<commit-ish>` is a remote-tracking branch.  See
 145        "--track" in linkgit:git-branch[1] for details.
 146
 147--lock::
 148        Keep the working tree locked after creation. This is the
 149        equivalent of `git worktree lock` after `git worktree add`,
 150        but without race condition.
 151
 152-n::
 153--dry-run::
 154        With `prune`, do not remove anything; just report what it would
 155        remove.
 156
 157--porcelain::
 158        With `list`, output in an easy-to-parse format for scripts.
 159        This format will remain stable across Git versions and regardless of user
 160        configuration.  See below for details.
 161
 162-v::
 163--verbose::
 164        With `prune`, report all removals.
 165
 166--expire <time>::
 167        With `prune`, only expire unused working trees older than <time>.
 168
 169--reason <string>::
 170        With `lock`, an explanation why the working tree is locked.
 171
 172<worktree>::
 173        Working trees can be identified by path, either relative or
 174        absolute.
 175+
 176If the last path components in the working tree's path is unique among
 177working trees, it can be used to identify worktrees. For example if
 178you only have two working trees, at "/abc/def/ghi" and "/abc/def/ggg",
 179then "ghi" or "def/ghi" is enough to point to the former working tree.
 180
 181DETAILS
 182-------
 183Each linked working tree has a private sub-directory in the repository's
 184$GIT_DIR/worktrees directory.  The private sub-directory's name is usually
 185the base name of the linked working tree's path, possibly appended with a
 186number to make it unique.  For example, when `$GIT_DIR=/path/main/.git` the
 187command `git worktree add /path/other/test-next next` creates the linked
 188working tree in `/path/other/test-next` and also creates a
 189`$GIT_DIR/worktrees/test-next` directory (or `$GIT_DIR/worktrees/test-next1`
 190if `test-next` is already taken).
 191
 192Within a linked working tree, $GIT_DIR is set to point to this private
 193directory (e.g. `/path/main/.git/worktrees/test-next` in the example) and
 194$GIT_COMMON_DIR is set to point back to the main working tree's $GIT_DIR
 195(e.g. `/path/main/.git`). These settings are made in a `.git` file located at
 196the top directory of the linked working tree.
 197
 198Path resolution via `git rev-parse --git-path` uses either
 199$GIT_DIR or $GIT_COMMON_DIR depending on the path. For example, in the
 200linked working tree `git rev-parse --git-path HEAD` returns
 201`/path/main/.git/worktrees/test-next/HEAD` (not
 202`/path/other/test-next/.git/HEAD` or `/path/main/.git/HEAD`) while `git
 203rev-parse --git-path refs/heads/master` uses
 204$GIT_COMMON_DIR and returns `/path/main/.git/refs/heads/master`,
 205since refs are shared across all working trees.
 206
 207See linkgit:gitrepository-layout[5] for more information. The rule of
 208thumb is do not make any assumption about whether a path belongs to
 209$GIT_DIR or $GIT_COMMON_DIR when you need to directly access something
 210inside $GIT_DIR. Use `git rev-parse --git-path` to get the final path.
 211
 212If you manually move a linked working tree, you need to update the 'gitdir' file
 213in the entry's directory. For example, if a linked working tree is moved
 214to `/newpath/test-next` and its `.git` file points to
 215`/path/main/.git/worktrees/test-next`, then update
 216`/path/main/.git/worktrees/test-next/gitdir` to reference `/newpath/test-next`
 217instead.
 218
 219To prevent a $GIT_DIR/worktrees entry from being pruned (which
 220can be useful in some situations, such as when the
 221entry's working tree is stored on a portable device), use the
 222`git worktree lock` command, which adds a file named
 223'locked' to the entry's directory. The file contains the reason in
 224plain text. For example, if a linked working tree's `.git` file points
 225to `/path/main/.git/worktrees/test-next` then a file named
 226`/path/main/.git/worktrees/test-next/locked` will prevent the
 227`test-next` entry from being pruned.  See
 228linkgit:gitrepository-layout[5] for details.
 229
 230LIST OUTPUT FORMAT
 231------------------
 232The worktree list command has two output formats.  The default format shows the
 233details on a single line with columns.  For example:
 234
 235------------
 236$ git worktree list
 237/path/to/bare-source            (bare)
 238/path/to/linked-worktree        abcd1234 [master]
 239/path/to/other-linked-worktree  1234abc  (detached HEAD)
 240------------
 241
 242Porcelain Format
 243~~~~~~~~~~~~~~~~
 244The porcelain format has a line per attribute.  Attributes are listed with a
 245label and value separated by a single space.  Boolean attributes (like 'bare'
 246and 'detached') are listed as a label only, and are only present if and only
 247if the value is true.  An empty line indicates the end of a worktree.  For
 248example:
 249
 250------------
 251$ git worktree list --porcelain
 252worktree /path/to/bare-source
 253bare
 254
 255worktree /path/to/linked-worktree
 256HEAD abcd1234abcd1234abcd1234abcd1234abcd1234
 257branch refs/heads/master
 258
 259worktree /path/to/other-linked-worktree
 260HEAD 1234abc1234abc1234abc1234abc1234abc1234a
 261detached
 262
 263------------
 264
 265EXAMPLES
 266--------
 267You are in the middle of a refactoring session and your boss comes in and
 268demands that you fix something immediately. You might typically use
 269linkgit:git-stash[1] to store your changes away temporarily, however, your
 270working tree is in such a state of disarray (with new, moved, and removed
 271files, and other bits and pieces strewn around) that you don't want to risk
 272disturbing any of it. Instead, you create a temporary linked working tree to
 273make the emergency fix, remove it when done, and then resume your earlier
 274refactoring session.
 275
 276------------
 277$ git worktree add -b emergency-fix ../temp master
 278$ pushd ../temp
 279# ... hack hack hack ...
 280$ git commit -a -m 'emergency fix for boss'
 281$ popd
 282$ git worktree remove ../temp
 283------------
 284
 285BUGS
 286----
 287Multiple checkout in general is still experimental, and the support
 288for submodules is incomplete. It is NOT recommended to make multiple
 289checkouts of a superproject.
 290
 291GIT
 292---
 293Part of the linkgit:git[1] suite