A wrapper for Git Worktree operations that provides an interactive API so developers can manage worktrees more easily — without switching between the terminal and VS Code.
After creating a ZSH plugin for Git operations, I noticed how often I switched between the terminal and my main editor (VS Code). To streamline my workflow, I built this extension to keep everything inside VS Code.
- Git ≥ 2.34.1
This extension supports multiple workspaces. Here's how it works:
- If you have more than one project open, you'll be prompted to choose the workspace to run the operation in.
- If only one project is open, it is automatically selected.
✅ Select a workspace from the list → the operation will run in that workspace.
Create a new worktree.
Behavior:
- If you skip the new branch name (
ESC
), it defaults to using the same name as the remote branch. - Since worktree and branch names are often identical, the extension validates user input accordingly. 👉 See Issue #22
Display all worktrees and switch between them easily via an interactive UI.
Remove an existing worktree.
Behavior:
- If untracked or modified files exist, a
⚠️ popup will appear in the bottom left. - You can force delete by clicking the
Force delete
button in that popup.
Restrictions:
- You cannot delete the worktree you're currently working in.
- 📦 Install the Git Worktrees extension from the VS Code Marketplace.
- 💡 Open the command palette:
Ctrl + Shift + P
- 🔍 Search for any available operations
All commands are prefixed with:
Git Worktree:
Create a new Git worktree with an intuitive interface.
View and switch between all active worktrees with ease.
Safely remove a worktree. If files are untracked or modified, you’ll get a prompt to confirm.
If something goes wrong, a helpful popup will appear at the bottom-left corner of your screen. Please don’t hesitate to open an issue if you encounter a bug.
Customize behavior using the following properties in your VS Code settings:
🏷️ Property | 🧩 Type | 🛠️ Default | 📃 Description |
---|---|---|---|
vsCodeGitWorktrees.remove.stalledBranches |
boolean |
false |
Remove local (stalled) branches that no longer exist on the remote |
vsCodeGitWorktrees.move.openNewVscodeWindow |
boolean |
true |
Open a new VS Code window when switching or creating a worktree |
vsCodeGitWorktrees.worktrees.dir.path |
string |
null |
Define a directory for storing all your worktrees |
vsCodeGitWorktrees.add.autoPush |
boolean |
true |
Automatically push the new worktree branch after creation |
vsCodeGitWorktrees.add.autoPull |
boolean |
true |
Automatically pull updates after creating a new worktree branch |
vsCodeGitWorktrees.worktreeCopyIncludePatterns |
array |
[] |
Files and folders to copy from the source repo to the new worktree |
vsCodeGitWorktrees.worktreeCopyExcludePatterns |
array |
[] |
Files and folders to exclude from the worktree copy |
vsCodeGitWorktrees.worktree.coloring |
boolean |
false |
Enable color labels when creating or switching worktrees |
vsCodeGitWorktrees.worktreeSearchPath |
string |
null |
Optional subdirectory (relative or absolute) where Git repositories can be found if the root workspace is not a Git repository |
We welcome all contributions, issues and feature requests, whether small or large. If you want to contribute, feel free to check out our issues page and our guidelines.