Git worktrees,
simplified.
A blazingly fast TUI for managing Git worktrees in bare repositories. Work on multiple branches simultaneously without the context switching pain.
$ npm install -g oh-my-worktree
Why worktrees?
Stop stashing, stop waiting for checkouts, stop rebuilding. With worktrees, each branch lives in its own directory—switch instantly by just changing folders.
| Without owt | With owt |
|---|---|
| git worktree list | Visual TUI with status |
| git worktree add ../feat -b feat | Press a, type name |
| cd ../feature && git status | Press Enter to switch |
| git fetch && git pull | Press f then p |
project/ ├── .bare/ # bare repo (hidden) ├── main/ # stable branch ├── feature-auth/ # your feature └── hotfix-payment/ # urgent fix
Everything you need
Powerful features to make Git worktree management effortless.
Dashboard View
See all worktrees at a glance with status indicators, branch info, and ahead/behind counts.
Quick Actions
Create, delete, and switch worktrees with single keystrokes. Supports feature/bugfix/hotfix prefixes.
Smart Detection
Run from any worktree directory. owt automatically finds the bare repository root.
Git Operations
Fetch, pull, push, and merge without leaving the TUI. See operation status in real-time.
Editor Integration
Open any worktree directly in VS Code, Vim, or your preferred editor with o.
Shell Integration
Press Enter to cd into the selected worktree. Works with bash, zsh, and fish.
Get started in seconds
Choose your preferred installation method.
npm Recommended
npm install -g oh-my-worktree
# Or run without installing
npx oh-my-worktree
Cargo Rust
cargo install --git https://github.com/dding-g/oh-my-worktree
# Or build from source
git clone https://github.com/dding-g/oh-my-worktree.git
cd oh-my-worktree && cargo build --release
Shell Integration
Enable seamless directory switching. When you press Enter on a worktree, your shell automatically changes to that directory.
-
1
Run
owt setupto see instructions for your shell - 2 Add the function to your shell config file
-
3
Reload with
source ~/.zshrc(or your shell's config)
owt() { local output_file=$(mktemp) OWT_OUTPUT_FILE="$output_file" command owt "$@" local exit_code=$? if [ -f "$output_file" ]; then local target=$(cat "$output_file") rm -f "$output_file" if [ -n "$target" ] && [ -d "$target" ]; then cd "$target" fi fi return $exit_code }
Vim-style navigation
Intuitive keyboard shortcuts you already know.
Navigation
Worktree Actions
Git Operations
External Apps
Ready to simplify your workflow?
Start managing Git worktrees the easy way.