Git Worktree

Tags: git, development


Worktrees are one of my favourite git features, and something I think is widely underused.

An absolute dream for multitaskers (or those like myself, who try & fail to do so) — worktrees can be used to quickly & easily have multiple branches of your repository on your machine at one time, side-by-side.

Find yourself working on a feature, but a colleague needs help with an issue on their branch? No longer do you need to stash your changes, checkout their branch, stop, re-build, and re-run the project etc.

Simply navigate to the root of your project (containing your .git directory) and run:

git worktree add ../worktree-1 colleague-branch-name

The add command in this scenario takes two parameters:

The first is the path where you wish to create the new worktree — note I’ve gone up one directory, so as to not pollute my current branch. This will create a new directory named worktree-1.

The second is the branch name you wish to checkout - this will be the checked-out branch for the worktree, in this case colleague-branch-name.

After running this command, navigate up a directory and you will see something like:

    original-project
        |--> .git (Main)
    worktree-1 
        |--> .git (colleague-branch-name)

Entering the worktree-1 directory and running a git status will confirm that we are now on the branch colleague-branch-name.

You are now free to make changes, test fixes, and create/push commits to this remote branch; all without interfering with your existing work.

Once you’ve pushed the fix for your colleague’s problem (like a helpful coworker), you can remove the worktree.

This is done by returning to our original-project directory containing our root .git directory, and running:

git worktree remove ../worktree-1

The remove command can be executed with one parameter — the path to our worktree that we want to remove.

That’s it! That simple — but very effective in the right circumstances.