Repository files navigation

wt - Git Worktree Manager

Testscontributions not accepted

A fast, project-aware Git worktree manager that simplifies working with multiple branches.

Status

This is a personal utility project. While public for ease of access, I'm not accepting external contributions at this time.

Features

  • 🚀 Quick Navigation - Switch between worktrees instantly with wt go or wt 0, wt 1
  • 🧠 Smart Commands - wt new feature works regardless of branch state (new/existing/has worktree)
  • 🔍 Fuzzy Matching - wt go mai automatically switches to main, with smart suggestions
  • One-Command Integration - wt integrate <branch> rebases onto main, fast-forward merges, then removes the worktree/branch
  • 📖 Universal Help - All commands support --help/-h with detailed documentation
  • 📁 Project-Specific Commands - Define custom navigation shortcuts per project
  • 🔄 Environment Sync - Copy .env files between worktrees
  • 🛠️ Self-Installing - Single binary that sets itself up
  • 🎯 Smart Detection - Automatically loads commands based on current project
  • ⌨️ Shell Completion - Intelligent tab completion for commands, branches, and flags

Installation

Quick Install

curl -fsSL https://raw.githubusercontent.com/tobiase/worktree-utils/main/get.sh | sh

Prebuilt Binaries

Download the latest releases from the GitHub releases page.

Build from Source

git clone https://github.com/tobiase/worktree-utils.git
cd worktree-utils
make build
./wt-bin setup

Usage

Core Commands

# List all worktrees
wt list # or: wt ls# Smart worktree creation (handles any branch state)
wt new feature-branch # Creates branch + worktree OR switches if exists
wt new feature --base main # Create from specific base branch# Quick navigation with fuzzy matching
wt go 1 # Switch by index
wt go feature-branch # Switch by exact name
wt go feat # Fuzzy match to 'feature-branch'
wt go mai # Auto-switches to 'main'
wt 0 # Direct shortcut to first worktree
wt 1 # Direct shortcut to second worktree# Smart removal with suggestions
wt rm feature-branch # Remove by exact name
wt rm feat # Fuzzy match for removal
wt rm feature --branch # Remove worktree AND delete branch (safe by default)
wt rm feature --branch --force # Force branch deletion if it's not merged# Integrate and clean up in one step
wt integrate feature-branch # Rebase onto main, fast-forward merge, remove worktree/branch# Get help for any command
wt go --help # Detailed help for 'go' command
wt new -h # Short help flag also works

Intelligent Behavior

wt uses "Do What I Mean" design - commands understand your intent and provide helpful guidance:

# Fuzzy matching with auto-resolution
$ wt go mai
# → Automatically switches to 'main' (unambiguous match)# Smart suggestions for ambiguous input
$ wt go te
# → Shows interactive picker: [test-branch, test-feature, temp-fix]# Helpful error messages
$ wt go xyz
# → "branch 'xyz' not found. Did you mean:# 1. main# 2. fix-xyz-bug# 3. feature-xyz"# Smart worktree creation
$ wt new existing-branch
# → "Switched to existing worktree 'existing-branch'" (no error!)
$ wt new new-branch
# → Creates branch + worktree + switches (handles everything)

Utility Commands

# Copy .env files to another worktree
wt env-copy feature-branch
wt env-copy feature-branch --recursive
# Initialize project configuration
wt project init myproject

Project-Specific Commands

Create project-specific navigation commands that only appear when you're in that project:

# ~/.config/wt/projects/myproject.yamlname: myprojectmatch:
paths:
- /Users/you/projects/myproject
- /Users/you/projects/myproject-worktrees/*commands:
dash:
description: "Go to dashboard"target: "apps/dashboard"api:
description: "Go to API"target: "services/api"

Now wt dash and wt api are available only in the myproject repository.

Shell Completion

wt provides intelligent shell completion for commands, branches, and flags to enhance your workflow.

Installation

Completion is automatically installed when you run the setup command:

wt setup

Manual Installation

For existing installations or custom setups:

# Bash users
wt completion bash >>~/.bashrc
source~/.bashrc
# Zsh users
wt completion zsh >>~/.zshrc
source~/.zshrc
# Or use with eval for temporary testingeval"$(wt completion bash)"eval"$(wt completion zsh)"

Features

  • Command completion: Tab-complete all wt commands and aliases (list, ls, go, switch, etc.)
  • Branch completion: Intelligent branch name suggestions for relevant commands
  • Flag completion: Complete command flags with descriptions (e.g., --base, --recursive)
  • Project commands: Auto-complete project-specific commands when available
  • Context-aware: Different completions based on command position and context

Setup Options

Control completion installation during setup:

# Install with auto-detected shell completion (default)
wt setup
# Install with specific shell completion
wt setup --completion bash
wt setup --completion zsh
# Install without completion
wt setup --no-completion

Configuration

Configuration files are stored in ~/.config/wt/:

~/.config/wt/
├── init.sh # Shell integration
├── completion.bash # Bash completion script
├── completion.zsh # Zsh completion script
└── projects/ # Project-specific configs
├── project1.yaml
└── project2.yaml

Documentation

Uninstall

wt setup --uninstall

Then remove the initialization line from your shell config (.bashrc, .zshrc, etc.).

License

MIT License - see LICENSE file for details.

About

A command-line tool that enhances Git worktrees with project-specific navigation, environment syncing, and seamless branch switching. Single binary, self-installing, works everywhere Git does.

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

wt - Git Worktree Manager

Testscontributions not accepted

A fast, project-aware Git worktree manager that simplifies working with multiple branches.

Status

This is a personal utility project. While public for ease of access, I'm not accepting external contributions at this time.

Features

  • 🚀 Quick Navigation - Switch between worktrees instantly with wt go or wt 0, wt 1
  • 🧠 Smart Commands - wt new feature works regardless of branch state (new/existing/has worktree)
  • 🔍 Fuzzy Matching - wt go mai automatically switches to main, with smart suggestions
  • One-Command Integration - wt integrate <branch> rebases onto main, fast-forward merges, then removes the worktree/branch
  • 📖 Universal Help - All commands support --help/-h with detailed documentation
  • 📁 Project-Specific Commands - Define custom navigation shortcuts per project
  • 🔄 Environment Sync - Copy .env files between worktrees
  • 🛠️ Self-Installing - Single binary that sets itself up
  • 🎯 Smart Detection - Automatically loads commands based on current project
  • ⌨️ Shell Completion - Intelligent tab completion for commands, branches, and flags

Installation

Quick Install

curl -fsSL https://raw.githubusercontent.com/tobiase/worktree-utils/main/get.sh | sh

Prebuilt Binaries

Download the latest releases from the GitHub releases page.

Build from Source

git clone https://github.com/tobiase/worktree-utils.git
cd worktree-utils
make build
./wt-bin setup

Usage

Core Commands

# List all worktrees
wt list # or: wt ls# Smart worktree creation (handles any branch state)
wt new feature-branch # Creates branch + worktree OR switches if exists
wt new feature --base main # Create from specific base branch# Quick navigation with fuzzy matching
wt go 1 # Switch by index
wt go feature-branch # Switch by exact name
wt go feat # Fuzzy match to 'feature-branch'
wt go mai # Auto-switches to 'main'
wt 0 # Direct shortcut to first worktree
wt 1 # Direct shortcut to second worktree# Smart removal with suggestions
wt rm feature-branch # Remove by exact name
wt rm feat # Fuzzy match for removal
wt rm feature --branch # Remove worktree AND delete branch (safe by default)
wt rm feature --branch --force # Force branch deletion if it's not merged# Integrate and clean up in one step
wt integrate feature-branch # Rebase onto main, fast-forward merge, remove worktree/branch# Get help for any command
wt go --help # Detailed help for 'go' command
wt new -h # Short help flag also works

Intelligent Behavior

wt uses "Do What I Mean" design - commands understand your intent and provide helpful guidance:

# Fuzzy matching with auto-resolution
$ wt go mai
# → Automatically switches to 'main' (unambiguous match)# Smart suggestions for ambiguous input
$ wt go te
# → Shows interactive picker: [test-branch, test-feature, temp-fix]# Helpful error messages
$ wt go xyz
# → "branch 'xyz' not found. Did you mean:# 1. main# 2. fix-xyz-bug# 3. feature-xyz"# Smart worktree creation
$ wt new existing-branch
# → "Switched to existing worktree 'existing-branch'" (no error!)
$ wt new new-branch
# → Creates branch + worktree + switches (handles everything)

Utility Commands

# Copy .env files to another worktree
wt env-copy feature-branch
wt env-copy feature-branch --recursive
# Initialize project configuration
wt project init myproject

Project-Specific Commands

Create project-specific navigation commands that only appear when you're in that project:

# ~/.config/wt/projects/myproject.yamlname: myprojectmatch:
paths:
- /Users/you/projects/myproject
- /Users/you/projects/myproject-worktrees/*commands:
dash:
description: "Go to dashboard"target: "apps/dashboard"api:
description: "Go to API"target: "services/api"

Now wt dash and wt api are available only in the myproject repository.

Shell Completion

wt provides intelligent shell completion for commands, branches, and flags to enhance your workflow.

Installation

Completion is automatically installed when you run the setup command:

wt setup

Manual Installation

For existing installations or custom setups:

# Bash users
wt completion bash >>~/.bashrc
source~/.bashrc
# Zsh users
wt completion zsh >>~/.zshrc
source~/.zshrc
# Or use with eval for temporary testingeval"$(wt completion bash)"eval"$(wt completion zsh)"

Features

  • Command completion: Tab-complete all wt commands and aliases (list, ls, go, switch, etc.)
  • Branch completion: Intelligent branch name suggestions for relevant commands
  • Flag completion: Complete command flags with descriptions (e.g., --base, --recursive)
  • Project commands: Auto-complete project-specific commands when available
  • Context-aware: Different completions based on command position and context

Setup Options

Control completion installation during setup:

# Install with auto-detected shell completion (default)
wt setup
# Install with specific shell completion
wt setup --completion bash
wt setup --completion zsh
# Install without completion
wt setup --no-completion

Configuration

Configuration files are stored in ~/.config/wt/:

~/.config/wt/
├── init.sh # Shell integration
├── completion.bash # Bash completion script
├── completion.zsh # Zsh completion script
└── projects/ # Project-specific configs
├── project1.yaml
└── project2.yaml

Documentation

Uninstall

wt setup --uninstall

Then remove the initialization line from your shell config (.bashrc, .zshrc, etc.).

License

MIT License - see LICENSE file for details.

About

A command-line tool that enhances Git worktrees with project-specific navigation, environment syncing, and seamless branch switching. Single binary, self-installing, works everywhere Git does.

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

wt - Git Worktree Manager

Testscontributions not accepted

A fast, project-aware Git worktree manager that simplifies working with multiple branches.

Status

This is a personal utility project. While public for ease of access, I'm not accepting external contributions at this time.

Features

  • 🚀 Quick Navigation - Switch between worktrees instantly with wt go or wt 0, wt 1
  • 🧠 Smart Commands - wt new feature works regardless of branch state (new/existing/has worktree)
  • 🔍 Fuzzy Matching - wt go mai automatically switches to main, with smart suggestions
  • One-Command Integration - wt integrate <branch> rebases onto main, fast-forward merges, then removes the worktree/branch
  • 📖 Universal Help - All commands support --help/-h with detailed documentation
  • 📁 Project-Specific Commands - Define custom navigation shortcuts per project
  • 🔄 Environment Sync - Copy .env files between worktrees
  • 🛠️ Self-Installing - Single binary that sets itself up
  • 🎯 Smart Detection - Automatically loads commands based on current project
  • ⌨️ Shell Completion - Intelligent tab completion for commands, branches, and flags

Installation

Quick Install

curl -fsSL https://raw.githubusercontent.com/tobiase/worktree-utils/main/get.sh | sh

Prebuilt Binaries

Download the latest releases from the GitHub releases page.

Build from Source

git clone https://github.com/tobiase/worktree-utils.git
cd worktree-utils
make build
./wt-bin setup

Usage

Core Commands

# List all worktrees
wt list # or: wt ls# Smart worktree creation (handles any branch state)
wt new feature-branch # Creates branch + worktree OR switches if exists
wt new feature --base main # Create from specific base branch# Quick navigation with fuzzy matching
wt go 1 # Switch by index
wt go feature-branch # Switch by exact name
wt go feat # Fuzzy match to 'feature-branch'
wt go mai # Auto-switches to 'main'
wt 0 # Direct shortcut to first worktree
wt 1 # Direct shortcut to second worktree# Smart removal with suggestions
wt rm feature-branch # Remove by exact name
wt rm feat # Fuzzy match for removal
wt rm feature --branch # Remove worktree AND delete branch (safe by default)
wt rm feature --branch --force # Force branch deletion if it's not merged# Integrate and clean up in one step
wt integrate feature-branch # Rebase onto main, fast-forward merge, remove worktree/branch# Get help for any command
wt go --help # Detailed help for 'go' command
wt new -h # Short help flag also works

Intelligent Behavior

wt uses "Do What I Mean" design - commands understand your intent and provide helpful guidance:

# Fuzzy matching with auto-resolution
$ wt go mai
# → Automatically switches to 'main' (unambiguous match)# Smart suggestions for ambiguous input
$ wt go te
# → Shows interactive picker: [test-branch, test-feature, temp-fix]# Helpful error messages
$ wt go xyz
# → "branch 'xyz' not found. Did you mean:# 1. main# 2. fix-xyz-bug# 3. feature-xyz"# Smart worktree creation
$ wt new existing-branch
# → "Switched to existing worktree 'existing-branch'" (no error!)
$ wt new new-branch
# → Creates branch + worktree + switches (handles everything)

Utility Commands

# Copy .env files to another worktree
wt env-copy feature-branch
wt env-copy feature-branch --recursive
# Initialize project configuration
wt project init myproject

Project-Specific Commands

Create project-specific navigation commands that only appear when you're in that project:

# ~/.config/wt/projects/myproject.yamlname: myprojectmatch:
paths:
- /Users/you/projects/myproject
- /Users/you/projects/myproject-worktrees/*commands:
dash:
description: "Go to dashboard"target: "apps/dashboard"api:
description: "Go to API"target: "services/api"

Now wt dash and wt api are available only in the myproject repository.

Shell Completion

wt provides intelligent shell completion for commands, branches, and flags to enhance your workflow.

Installation

Completion is automatically installed when you run the setup command:

wt setup

Manual Installation

For existing installations or custom setups:

# Bash users
wt completion bash >>~/.bashrc
source~/.bashrc
# Zsh users
wt completion zsh >>~/.zshrc
source~/.zshrc
# Or use with eval for temporary testingeval"$(wt completion bash)"eval"$(wt completion zsh)"

Features

  • Command completion: Tab-complete all wt commands and aliases (list, ls, go, switch, etc.)
  • Branch completion: Intelligent branch name suggestions for relevant commands
  • Flag completion: Complete command flags with descriptions (e.g., --base, --recursive)
  • Project commands: Auto-complete project-specific commands when available
  • Context-aware: Different completions based on command position and context

Setup Options

Control completion installation during setup:

# Install with auto-detected shell completion (default)
wt setup
# Install with specific shell completion
wt setup --completion bash
wt setup --completion zsh
# Install without completion
wt setup --no-completion

Configuration

Configuration files are stored in ~/.config/wt/:

~/.config/wt/
├── init.sh # Shell integration
├── completion.bash # Bash completion script
├── completion.zsh # Zsh completion script
└── projects/ # Project-specific configs
├── project1.yaml
└── project2.yaml

Documentation

Uninstall

wt setup --uninstall

Then remove the initialization line from your shell config (.bashrc, .zshrc, etc.).

License

MIT License - see LICENSE file for details.

About

A command-line tool that enhances Git worktrees with project-specific navigation, environment syncing, and seamless branch switching. Single binary, self-installing, works everywhere Git does.

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

wt - Git Worktree Manager

Testscontributions not accepted

A fast, project-aware Git worktree manager that simplifies working with multiple branches.

Status

This is a personal utility project. While public for ease of access, I'm not accepting external contributions at this time.

Features

  • 🚀 Quick Navigation - Switch between worktrees instantly with wt go or wt 0, wt 1
  • 🧠 Smart Commands - wt new feature works regardless of branch state (new/existing/has worktree)
  • 🔍 Fuzzy Matching - wt go mai automatically switches to main, with smart suggestions
  • One-Command Integration - wt integrate <branch> rebases onto main, fast-forward merges, then removes the worktree/branch
  • 📖 Universal Help - All commands support --help/-h with detailed documentation
  • 📁 Project-Specific Commands - Define custom navigation shortcuts per project
  • 🔄 Environment Sync - Copy .env files between worktrees
  • 🛠️ Self-Installing - Single binary that sets itself up
  • 🎯 Smart Detection - Automatically loads commands based on current project
  • ⌨️ Shell Completion - Intelligent tab completion for commands, branches, and flags

Installation

Quick Install

curl -fsSL https://raw.githubusercontent.com/tobiase/worktree-utils/main/get.sh | sh

Prebuilt Binaries

Download the latest releases from the GitHub releases page.

Build from Source

git clone https://github.com/tobiase/worktree-utils.git
cd worktree-utils
make build
./wt-bin setup

Usage

Core Commands

# List all worktrees
wt list # or: wt ls# Smart worktree creation (handles any branch state)
wt new feature-branch # Creates branch + worktree OR switches if exists
wt new feature --base main # Create from specific base branch# Quick navigation with fuzzy matching
wt go 1 # Switch by index
wt go feature-branch # Switch by exact name
wt go feat # Fuzzy match to 'feature-branch'
wt go mai # Auto-switches to 'main'
wt 0 # Direct shortcut to first worktree
wt 1 # Direct shortcut to second worktree# Smart removal with suggestions
wt rm feature-branch # Remove by exact name
wt rm feat # Fuzzy match for removal
wt rm feature --branch # Remove worktree AND delete branch (safe by default)
wt rm feature --branch --force # Force branch deletion if it's not merged# Integrate and clean up in one step
wt integrate feature-branch # Rebase onto main, fast-forward merge, remove worktree/branch# Get help for any command
wt go --help # Detailed help for 'go' command
wt new -h # Short help flag also works

Intelligent Behavior

wt uses "Do What I Mean" design - commands understand your intent and provide helpful guidance:

# Fuzzy matching with auto-resolution
$ wt go mai
# → Automatically switches to 'main' (unambiguous match)# Smart suggestions for ambiguous input
$ wt go te
# → Shows interactive picker: [test-branch, test-feature, temp-fix]# Helpful error messages
$ wt go xyz
# → "branch 'xyz' not found. Did you mean:# 1. main# 2. fix-xyz-bug# 3. feature-xyz"# Smart worktree creation
$ wt new existing-branch
# → "Switched to existing worktree 'existing-branch'" (no error!)
$ wt new new-branch
# → Creates branch + worktree + switches (handles everything)

Utility Commands

# Copy .env files to another worktree
wt env-copy feature-branch
wt env-copy feature-branch --recursive
# Initialize project configuration
wt project init myproject

Project-Specific Commands

Create project-specific navigation commands that only appear when you're in that project:

# ~/.config/wt/projects/myproject.yamlname: myprojectmatch:
paths:
- /Users/you/projects/myproject
- /Users/you/projects/myproject-worktrees/*commands:
dash:
description: "Go to dashboard"target: "apps/dashboard"api:
description: "Go to API"target: "services/api"

Now wt dash and wt api are available only in the myproject repository.

Shell Completion

wt provides intelligent shell completion for commands, branches, and flags to enhance your workflow.

Installation

Completion is automatically installed when you run the setup command:

wt setup

Manual Installation

For existing installations or custom setups:

# Bash users
wt completion bash >>~/.bashrc
source~/.bashrc
# Zsh users
wt completion zsh >>~/.zshrc
source~/.zshrc
# Or use with eval for temporary testingeval"$(wt completion bash)"eval"$(wt completion zsh)"

Features

  • Command completion: Tab-complete all wt commands and aliases (list, ls, go, switch, etc.)
  • Branch completion: Intelligent branch name suggestions for relevant commands
  • Flag completion: Complete command flags with descriptions (e.g., --base, --recursive)
  • Project commands: Auto-complete project-specific commands when available
  • Context-aware: Different completions based on command position and context

Setup Options

Control completion installation during setup:

# Install with auto-detected shell completion (default)
wt setup
# Install with specific shell completion
wt setup --completion bash
wt setup --completion zsh
# Install without completion
wt setup --no-completion

Configuration

Configuration files are stored in ~/.config/wt/:

~/.config/wt/
├── init.sh # Shell integration
├── completion.bash # Bash completion script
├── completion.zsh # Zsh completion script
└── projects/ # Project-specific configs
├── project1.yaml
└── project2.yaml

Documentation

Uninstall

wt setup --uninstall

Then remove the initialization line from your shell config (.bashrc, .zshrc, etc.).

License

MIT License - see LICENSE file for details.

About

A command-line tool that enhances Git worktrees with project-specific navigation, environment syncing, and seamless branch switching. Single binary, self-installing, works everywhere Git does.

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

wt - Git Worktree Manager

Testscontributions not accepted

A fast, project-aware Git worktree manager that simplifies working with multiple branches.

Status

This is a personal utility project. While public for ease of access, I'm not accepting external contributions at this time.

Features

  • 🚀 Quick Navigation - Switch between worktrees instantly with wt go or wt 0, wt 1
  • 🧠 Smart Commands - wt new feature works regardless of branch state (new/existing/has worktree)
  • 🔍 Fuzzy Matching - wt go mai automatically switches to main, with smart suggestions
  • One-Command Integration - wt integrate <branch> rebases onto main, fast-forward merges, then removes the worktree/branch
  • 📖 Universal Help - All commands support --help/-h with detailed documentation
  • 📁 Project-Specific Commands - Define custom navigation shortcuts per project
  • 🔄 Environment Sync - Copy .env files between worktrees
  • 🛠️ Self-Installing - Single binary that sets itself up
  • 🎯 Smart Detection - Automatically loads commands based on current project
  • ⌨️ Shell Completion - Intelligent tab completion for commands, branches, and flags

Installation

Quick Install

curl -fsSL https://raw.githubusercontent.com/tobiase/worktree-utils/main/get.sh | sh

Prebuilt Binaries

Download the latest releases from the GitHub releases page.

Build from Source

git clone https://github.com/tobiase/worktree-utils.git
cd worktree-utils
make build
./wt-bin setup

Usage

Core Commands

# List all worktrees
wt list # or: wt ls# Smart worktree creation (handles any branch state)
wt new feature-branch # Creates branch + worktree OR switches if exists
wt new feature --base main # Create from specific base branch# Quick navigation with fuzzy matching
wt go 1 # Switch by index
wt go feature-branch # Switch by exact name
wt go feat # Fuzzy match to 'feature-branch'
wt go mai # Auto-switches to 'main'
wt 0 # Direct shortcut to first worktree
wt 1 # Direct shortcut to second worktree# Smart removal with suggestions
wt rm feature-branch # Remove by exact name
wt rm feat # Fuzzy match for removal
wt rm feature --branch # Remove worktree AND delete branch (safe by default)
wt rm feature --branch --force # Force branch deletion if it's not merged# Integrate and clean up in one step
wt integrate feature-branch # Rebase onto main, fast-forward merge, remove worktree/branch# Get help for any command
wt go --help # Detailed help for 'go' command
wt new -h # Short help flag also works

Intelligent Behavior

wt uses "Do What I Mean" design - commands understand your intent and provide helpful guidance:

# Fuzzy matching with auto-resolution
$ wt go mai
# → Automatically switches to 'main' (unambiguous match)# Smart suggestions for ambiguous input
$ wt go te
# → Shows interactive picker: [test-branch, test-feature, temp-fix]# Helpful error messages
$ wt go xyz
# → "branch 'xyz' not found. Did you mean:# 1. main# 2. fix-xyz-bug# 3. feature-xyz"# Smart worktree creation
$ wt new existing-branch
# → "Switched to existing worktree 'existing-branch'" (no error!)
$ wt new new-branch
# → Creates branch + worktree + switches (handles everything)

Utility Commands

# Copy .env files to another worktree
wt env-copy feature-branch
wt env-copy feature-branch --recursive
# Initialize project configuration
wt project init myproject

Project-Specific Commands

Create project-specific navigation commands that only appear when you're in that project:

# ~/.config/wt/projects/myproject.yamlname: myprojectmatch:
paths:
- /Users/you/projects/myproject
- /Users/you/projects/myproject-worktrees/*commands:
dash:
description: "Go to dashboard"target: "apps/dashboard"api:
description: "Go to API"target: "services/api"

Now wt dash and wt api are available only in the myproject repository.

Shell Completion

wt provides intelligent shell completion for commands, branches, and flags to enhance your workflow.

Installation

Completion is automatically installed when you run the setup command:

wt setup

Manual Installation

For existing installations or custom setups:

# Bash users
wt completion bash >>~/.bashrc
source~/.bashrc
# Zsh users
wt completion zsh >>~/.zshrc
source~/.zshrc
# Or use with eval for temporary testingeval"$(wt completion bash)"eval"$(wt completion zsh)"

Features

  • Command completion: Tab-complete all wt commands and aliases (list, ls, go, switch, etc.)
  • Branch completion: Intelligent branch name suggestions for relevant commands
  • Flag completion: Complete command flags with descriptions (e.g., --base, --recursive)
  • Project commands: Auto-complete project-specific commands when available
  • Context-aware: Different completions based on command position and context

Setup Options

Control completion installation during setup:

# Install with auto-detected shell completion (default)
wt setup
# Install with specific shell completion
wt setup --completion bash
wt setup --completion zsh
# Install without completion
wt setup --no-completion

Configuration

Configuration files are stored in ~/.config/wt/:

~/.config/wt/
├── init.sh # Shell integration
├── completion.bash # Bash completion script
├── completion.zsh # Zsh completion script
└── projects/ # Project-specific configs
├── project1.yaml
└── project2.yaml

Documentation

Uninstall

wt setup --uninstall

Then remove the initialization line from your shell config (.bashrc, .zshrc, etc.).

License

MIT License - see LICENSE file for details.

About

A command-line tool that enhances Git worktrees with project-specific navigation, environment syncing, and seamless branch switching. Single binary, self-installing, works everywhere Git does.

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

wt - Git Worktree Manager

Testscontributions not accepted

A fast, project-aware Git worktree manager that simplifies working with multiple branches.

Status

This is a personal utility project. While public for ease of access, I'm not accepting external contributions at this time.

Features

  • 🚀 Quick Navigation - Switch between worktrees instantly with wt go or wt 0, wt 1
  • 🧠 Smart Commands - wt new feature works regardless of branch state (new/existing/has worktree)
  • 🔍 Fuzzy Matching - wt go mai automatically switches to main, with smart suggestions
  • One-Command Integration - wt integrate <branch> rebases onto main, fast-forward merges, then removes the worktree/branch
  • 📖 Universal Help - All commands support --help/-h with detailed documentation
  • 📁 Project-Specific Commands - Define custom navigation shortcuts per project
  • 🔄 Environment Sync - Copy .env files between worktrees
  • 🛠️ Self-Installing - Single binary that sets itself up
  • 🎯 Smart Detection - Automatically loads commands based on current project
  • ⌨️ Shell Completion - Intelligent tab completion for commands, branches, and flags

Installation

Quick Install

curl -fsSL https://raw.githubusercontent.com/tobiase/worktree-utils/main/get.sh | sh

Prebuilt Binaries

Download the latest releases from the GitHub releases page.

Build from Source

git clone https://github.com/tobiase/worktree-utils.git
cd worktree-utils
make build
./wt-bin setup

Usage

Core Commands

# List all worktrees
wt list # or: wt ls# Smart worktree creation (handles any branch state)
wt new feature-branch # Creates branch + worktree OR switches if exists
wt new feature --base main # Create from specific base branch# Quick navigation with fuzzy matching
wt go 1 # Switch by index
wt go feature-branch # Switch by exact name
wt go feat # Fuzzy match to 'feature-branch'
wt go mai # Auto-switches to 'main'
wt 0 # Direct shortcut to first worktree
wt 1 # Direct shortcut to second worktree# Smart removal with suggestions
wt rm feature-branch # Remove by exact name
wt rm feat # Fuzzy match for removal
wt rm feature --branch # Remove worktree AND delete branch (safe by default)
wt rm feature --branch --force # Force branch deletion if it's not merged# Integrate and clean up in one step
wt integrate feature-branch # Rebase onto main, fast-forward merge, remove worktree/branch# Get help for any command
wt go --help # Detailed help for 'go' command
wt new -h # Short help flag also works

Intelligent Behavior

wt uses "Do What I Mean" design - commands understand your intent and provide helpful guidance:

# Fuzzy matching with auto-resolution
$ wt go mai
# → Automatically switches to 'main' (unambiguous match)# Smart suggestions for ambiguous input
$ wt go te
# → Shows interactive picker: [test-branch, test-feature, temp-fix]# Helpful error messages
$ wt go xyz
# → "branch 'xyz' not found. Did you mean:# 1. main# 2. fix-xyz-bug# 3. feature-xyz"# Smart worktree creation
$ wt new existing-branch
# → "Switched to existing worktree 'existing-branch'" (no error!)
$ wt new new-branch
# → Creates branch + worktree + switches (handles everything)

Utility Commands

# Copy .env files to another worktree
wt env-copy feature-branch
wt env-copy feature-branch --recursive
# Initialize project configuration
wt project init myproject

Project-Specific Commands

Create project-specific navigation commands that only appear when you're in that project:

# ~/.config/wt/projects/myproject.yamlname: myprojectmatch:
paths:
- /Users/you/projects/myproject
- /Users/you/projects/myproject-worktrees/*commands:
dash:
description: "Go to dashboard"target: "apps/dashboard"api:
description: "Go to API"target: "services/api"

Now wt dash and wt api are available only in the myproject repository.

Shell Completion

wt provides intelligent shell completion for commands, branches, and flags to enhance your workflow.

Installation

Completion is automatically installed when you run the setup command:

wt setup

Manual Installation

For existing installations or custom setups:

# Bash users
wt completion bash >>~/.bashrc
source~/.bashrc
# Zsh users
wt completion zsh >>~/.zshrc
source~/.zshrc
# Or use with eval for temporary testingeval"$(wt completion bash)"eval"$(wt completion zsh)"

Features

  • Command completion: Tab-complete all wt commands and aliases (list, ls, go, switch, etc.)
  • Branch completion: Intelligent branch name suggestions for relevant commands
  • Flag completion: Complete command flags with descriptions (e.g., --base, --recursive)
  • Project commands: Auto-complete project-specific commands when available
  • Context-aware: Different completions based on command position and context

Setup Options

Control completion installation during setup:

# Install with auto-detected shell completion (default)
wt setup
# Install with specific shell completion
wt setup --completion bash
wt setup --completion zsh
# Install without completion
wt setup --no-completion

Configuration

Configuration files are stored in ~/.config/wt/:

~/.config/wt/
├── init.sh # Shell integration
├── completion.bash # Bash completion script
├── completion.zsh # Zsh completion script
└── projects/ # Project-specific configs
├── project1.yaml
└── project2.yaml

Documentation

Uninstall

wt setup --uninstall

Then remove the initialization line from your shell config (.bashrc, .zshrc, etc.).

License

MIT License - see LICENSE file for details.

About

A command-line tool that enhances Git worktrees with project-specific navigation, environment syncing, and seamless branch switching. Single binary, self-installing, works everywhere Git does.

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

wt - Git Worktree Manager

Testscontributions not accepted

A fast, project-aware Git worktree manager that simplifies working with multiple branches.

Status

This is a personal utility project. While public for ease of access, I'm not accepting external contributions at this time.

Features

  • 🚀 Quick Navigation - Switch between worktrees instantly with wt go or wt 0, wt 1
  • 🧠 Smart Commands - wt new feature works regardless of branch state (new/existing/has worktree)
  • 🔍 Fuzzy Matching - wt go mai automatically switches to main, with smart suggestions
  • One-Command Integration - wt integrate <branch> rebases onto main, fast-forward merges, then removes the worktree/branch
  • 📖 Universal Help - All commands support --help/-h with detailed documentation
  • 📁 Project-Specific Commands - Define custom navigation shortcuts per project
  • 🔄 Environment Sync - Copy .env files between worktrees
  • 🛠️ Self-Installing - Single binary that sets itself up
  • 🎯 Smart Detection - Automatically loads commands based on current project
  • ⌨️ Shell Completion - Intelligent tab completion for commands, branches, and flags

Installation

Quick Install

curl -fsSL https://raw.githubusercontent.com/tobiase/worktree-utils/main/get.sh | sh

Prebuilt Binaries

Download the latest releases from the GitHub releases page.

Build from Source

git clone https://github.com/tobiase/worktree-utils.git
cd worktree-utils
make build
./wt-bin setup

Usage

Core Commands

# List all worktrees
wt list # or: wt ls# Smart worktree creation (handles any branch state)
wt new feature-branch # Creates branch + worktree OR switches if exists
wt new feature --base main # Create from specific base branch# Quick navigation with fuzzy matching
wt go 1 # Switch by index
wt go feature-branch # Switch by exact name
wt go feat # Fuzzy match to 'feature-branch'
wt go mai # Auto-switches to 'main'
wt 0 # Direct shortcut to first worktree
wt 1 # Direct shortcut to second worktree# Smart removal with suggestions
wt rm feature-branch # Remove by exact name
wt rm feat # Fuzzy match for removal
wt rm feature --branch # Remove worktree AND delete branch (safe by default)
wt rm feature --branch --force # Force branch deletion if it's not merged# Integrate and clean up in one step
wt integrate feature-branch # Rebase onto main, fast-forward merge, remove worktree/branch# Get help for any command
wt go --help # Detailed help for 'go' command
wt new -h # Short help flag also works

Intelligent Behavior

wt uses "Do What I Mean" design - commands understand your intent and provide helpful guidance:

# Fuzzy matching with auto-resolution
$ wt go mai
# → Automatically switches to 'main' (unambiguous match)# Smart suggestions for ambiguous input
$ wt go te
# → Shows interactive picker: [test-branch, test-feature, temp-fix]# Helpful error messages
$ wt go xyz
# → "branch 'xyz' not found. Did you mean:# 1. main# 2. fix-xyz-bug# 3. feature-xyz"# Smart worktree creation
$ wt new existing-branch
# → "Switched to existing worktree 'existing-branch'" (no error!)
$ wt new new-branch
# → Creates branch + worktree + switches (handles everything)

Utility Commands

# Copy .env files to another worktree
wt env-copy feature-branch
wt env-copy feature-branch --recursive
# Initialize project configuration
wt project init myproject

Project-Specific Commands

Create project-specific navigation commands that only appear when you're in that project:

# ~/.config/wt/projects/myproject.yamlname: myprojectmatch:
paths:
- /Users/you/projects/myproject
- /Users/you/projects/myproject-worktrees/*commands:
dash:
description: "Go to dashboard"target: "apps/dashboard"api:
description: "Go to API"target: "services/api"

Now wt dash and wt api are available only in the myproject repository.

Shell Completion

wt provides intelligent shell completion for commands, branches, and flags to enhance your workflow.

Installation

Completion is automatically installed when you run the setup command:

wt setup

Manual Installation

For existing installations or custom setups:

# Bash users
wt completion bash >>~/.bashrc
source~/.bashrc
# Zsh users
wt completion zsh >>~/.zshrc
source~/.zshrc
# Or use with eval for temporary testingeval"$(wt completion bash)"eval"$(wt completion zsh)"

Features

  • Command completion: Tab-complete all wt commands and aliases (list, ls, go, switch, etc.)
  • Branch completion: Intelligent branch name suggestions for relevant commands
  • Flag completion: Complete command flags with descriptions (e.g., --base, --recursive)
  • Project commands: Auto-complete project-specific commands when available
  • Context-aware: Different completions based on command position and context

Setup Options

Control completion installation during setup:

# Install with auto-detected shell completion (default)
wt setup
# Install with specific shell completion
wt setup --completion bash
wt setup --completion zsh
# Install without completion
wt setup --no-completion

Configuration

Configuration files are stored in ~/.config/wt/:

~/.config/wt/
├── init.sh # Shell integration
├── completion.bash # Bash completion script
├── completion.zsh # Zsh completion script
└── projects/ # Project-specific configs
├── project1.yaml
└── project2.yaml

Documentation

Uninstall

wt setup --uninstall

Then remove the initialization line from your shell config (.bashrc, .zshrc, etc.).

License

MIT License - see LICENSE file for details.

About

A command-line tool that enhances Git worktrees with project-specific navigation, environment syncing, and seamless branch switching. Single binary, self-installing, works everywhere Git does.

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

wt - Git Worktree Manager

Testscontributions not accepted

A fast, project-aware Git worktree manager that simplifies working with multiple branches.

Status

This is a personal utility project. While public for ease of access, I'm not accepting external contributions at this time.

Features

  • 🚀 Quick Navigation - Switch between worktrees instantly with wt go or wt 0, wt 1
  • 🧠 Smart Commands - wt new feature works regardless of branch state (new/existing/has worktree)
  • 🔍 Fuzzy Matching - wt go mai automatically switches to main, with smart suggestions
  • One-Command Integration - wt integrate <branch> rebases onto main, fast-forward merges, then removes the worktree/branch
  • 📖 Universal Help - All commands support --help/-h with detailed documentation
  • 📁 Project-Specific Commands - Define custom navigation shortcuts per project
  • 🔄 Environment Sync - Copy .env files between worktrees
  • 🛠️ Self-Installing - Single binary that sets itself up
  • 🎯 Smart Detection - Automatically loads commands based on current project
  • ⌨️ Shell Completion - Intelligent tab completion for commands, branches, and flags

Installation

Quick Install

curl -fsSL https://raw.githubusercontent.com/tobiase/worktree-utils/main/get.sh | sh

Prebuilt Binaries

Download the latest releases from the GitHub releases page.

Build from Source

git clone https://github.com/tobiase/worktree-utils.git
cd worktree-utils
make build
./wt-bin setup

Usage

Core Commands

# List all worktrees
wt list # or: wt ls# Smart worktree creation (handles any branch state)
wt new feature-branch # Creates branch + worktree OR switches if exists
wt new feature --base main # Create from specific base branch# Quick navigation with fuzzy matching
wt go 1 # Switch by index
wt go feature-branch # Switch by exact name
wt go feat # Fuzzy match to 'feature-branch'
wt go mai # Auto-switches to 'main'
wt 0 # Direct shortcut to first worktree
wt 1 # Direct shortcut to second worktree# Smart removal with suggestions
wt rm feature-branch # Remove by exact name
wt rm feat # Fuzzy match for removal
wt rm feature --branch # Remove worktree AND delete branch (safe by default)
wt rm feature --branch --force # Force branch deletion if it's not merged# Integrate and clean up in one step
wt integrate feature-branch # Rebase onto main, fast-forward merge, remove worktree/branch# Get help for any command
wt go --help # Detailed help for 'go' command
wt new -h # Short help flag also works

Intelligent Behavior

wt uses "Do What I Mean" design - commands understand your intent and provide helpful guidance:

# Fuzzy matching with auto-resolution
$ wt go mai
# → Automatically switches to 'main' (unambiguous match)# Smart suggestions for ambiguous input
$ wt go te
# → Shows interactive picker: [test-branch, test-feature, temp-fix]# Helpful error messages
$ wt go xyz
# → "branch 'xyz' not found. Did you mean:# 1. main# 2. fix-xyz-bug# 3. feature-xyz"# Smart worktree creation
$ wt new existing-branch
# → "Switched to existing worktree 'existing-branch'" (no error!)
$ wt new new-branch
# → Creates branch + worktree + switches (handles everything)

Utility Commands

# Copy .env files to another worktree
wt env-copy feature-branch
wt env-copy feature-branch --recursive
# Initialize project configuration
wt project init myproject

Project-Specific Commands

Create project-specific navigation commands that only appear when you're in that project:

# ~/.config/wt/projects/myproject.yamlname: myprojectmatch:
paths:
- /Users/you/projects/myproject
- /Users/you/projects/myproject-worktrees/*commands:
dash:
description: "Go to dashboard"target: "apps/dashboard"api:
description: "Go to API"target: "services/api"

Now wt dash and wt api are available only in the myproject repository.

Shell Completion

wt provides intelligent shell completion for commands, branches, and flags to enhance your workflow.

Installation

Completion is automatically installed when you run the setup command:

wt setup

Manual Installation

For existing installations or custom setups:

# Bash users
wt completion bash >>~/.bashrc
source~/.bashrc
# Zsh users
wt completion zsh >>~/.zshrc
source~/.zshrc
# Or use with eval for temporary testingeval"$(wt completion bash)"eval"$(wt completion zsh)"

Features

  • Command completion: Tab-complete all wt commands and aliases (list, ls, go, switch, etc.)
  • Branch completion: Intelligent branch name suggestions for relevant commands
  • Flag completion: Complete command flags with descriptions (e.g., --base, --recursive)
  • Project commands: Auto-complete project-specific commands when available
  • Context-aware: Different completions based on command position and context

Setup Options

Control completion installation during setup:

# Install with auto-detected shell completion (default)
wt setup
# Install with specific shell completion
wt setup --completion bash
wt setup --completion zsh
# Install without completion
wt setup --no-completion

Configuration

Configuration files are stored in ~/.config/wt/:

~/.config/wt/
├── init.sh # Shell integration
├── completion.bash # Bash completion script
├── completion.zsh # Zsh completion script
└── projects/ # Project-specific configs
├── project1.yaml
└── project2.yaml

Documentation

Uninstall

wt setup --uninstall

Then remove the initialization line from your shell config (.bashrc, .zshrc, etc.).

License

MIT License - see LICENSE file for details.

About

A command-line tool that enhances Git worktrees with project-specific navigation, environment syncing, and seamless branch switching. Single binary, self-installing, works everywhere Git does.

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages