Git Worktree Operations

From NovaOrdis Knowledge Base
Jump to navigation Jump to search

Internal

Typical Working Tree Workflow

Assuming that a developer is in the middle of a major refactoring on a branch and it is impractical to commit a stable checkpoint, or even stash, switching to a different branch while leaving the current branch in the state it is in involves:

git worktree add ../playground-temp /existing/task/branch/I/need/to/work/on

It is also possible to create a new branch on-the-fly. The branch is based on the branch specified in command line:

git worktree add -b temp-emergency-branch  ../playground-temp /existing/task/branch/I/need/to/work/on

To interact with the newly checked out branch in the new working tree, simply go to the working tree directory:

cd ../playground-temp

After operating changes, commit as usual, and possibly remove the working tree:

git commit -m "some work"
cd ../playground
git worktree remove ../playground-temp

Create a Working Tree

git worktree add <absolute-or-relative-local-path> <branch|commit|tag>

A remote branch for which there is no local tracking branch can be initialized in a work tree as follows:

git worktree add --track -b <branch-name> <absolute-or-relative-local-path> <remote>/<branch-name>

Remove a Working Tree

git worktree remove

It is possible to remove the work tree local filesystem directory without calling git worktree remove. The associated administrative files will be eventually removed automatically. Alternatively,

git worktree prune

can be execute to clean up state.