Git Worktree
What is git worktree?
Normally, a repository has one working folder, with one branch checked out. To work on another branch, you must commit or stash your changes first.
git worktree gives you a second working folder for the same repository, with another branch checked out. Both folders share the same history, so there is no second clone to download.
A typical use: you are in the middle of a feature, and an urgent bug must be fixed on another branch.
Add a Worktree
Use git worktree add with a folder name and a branch:
Example: Check Out hotfix in a New Folder
git worktree add ../project-hotfix hotfix
Preparing worktree (checking out 'hotfix')
HEAD is now at 976c598 First commit
Try it Yourself »
Now ../project-hotfix holds the hotfix branch, and your original folder still has your feature work, untouched.
Create a New Branch in a Worktree (-b)
Use -b to create a new branch at the same time:
Example: New Branch in a New Folder
git worktree add -b experiment ../project-experiment
Preparing worktree (new branch 'experiment')
HEAD is now at 976c598 First commit
Try it Yourself »
List Worktrees
Example: List All Worktrees
git worktree list
/home/user/project 976c598 [main]
/home/user/project-hotfix 976c598 [hotfix]
Try it Yourself »
Work in the Worktree
A worktree is a normal folder. Go into it, change files and commit as usual. The commit is in the shared history right away:
Example: Commit from the Worktree
cd ../project-hotfix
echo "Hello Git" > index.html
git commit -qam "Fix the greeting"
cd ../project
git log --oneline hotfix
89d2f67 (hotfix) Fix the greeting
976c598 (HEAD -> main) First commit
Try it Yourself »
A branch can only be checked out in one worktree at a time. Git stops you if you try to check out the same branch twice.
Remove a Worktree
When you are done, remove the folder with git worktree remove:
Example: Remove a Worktree
git worktree remove ../project-hotfix
git worktree list
/home/user/project 976c598 [main]
Try it Yourself »
The branch and its commits are kept. Only the extra folder is removed. If you deleted the folder by hand, run git worktree prune to clean up.