Git worktree it a git feature which allows you to checkout a single repository into multiple locations on your filesystem. It has a few rough edges, but if you follow a few simple rules it can be make context switching much easier than git's other mechanisms, such as stashing or switching branches. My folder structure will usually look something like this:
MyRepo/
master/
← The original checkout, using something like git clone <repo url> master
feature_branch_1/
← A feature branch
hotfix_branch_1/
← A quick hotfix I need to make
- Create the top-level folder:
mkdir MyRepo
- Checkout the repository's master branch as a normal checkout:
cd MyRepo; git clone <repo url> master
- Add a branch:
cd master; git worktree add -b <branch_name> ../<folder_name> HEAD
branch_name
andfolder_name
should likely be the same to avoid confusion (in larger projects, I would prependbranch_name
with my username)
- Switch to that branch:
cd ../my_branch
- When you need to create a new branch, make sure to create it from the branch you want to base it on (often, this is
master
)
git worktree remove <path_to_worktree>
from a directory containing your worktree- (Optional) Delete the local branch with
git branch -D branch_name
- (Optional) Delete the remote branch with
git push <remote> :<branch_name>
- In a worktree, the
.git
folder is just a file, so scripts modifying repo settings like git hooks may fail. The git hooks in the original repository apply to its worktrees. - You can actually checkout a worktree inside of the repository by leaving out the
../
before folder name. This is not recommended. - You can not have the same branch checked out in multiple worktrees
I have a question. In a gitrepo, I have two remotes (
gitHub
,gitlab
). I created a new branch locally (git worktree add -b newlocalbranch ./newlocalbranch
) and wanted to push that branch to only one of the remotes. How can I do that?Thanks in advance.