v0.5.1 · Now Available

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
owt — ~/projects/app.git
owt
Worktrees 3 total
main origin/main
✓ clean
feature/auth origin/feature/auth ↑2 ↓1
~ modified
hotfix/payment origin/hotfix/payment
✓ clean

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 structure
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 setup to 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

jkMove up / down
ggGJump to top / bottom
/Search worktrees
EnterEnter worktree (cd)

Worktree Actions

aAdd new worktree
dDelete worktree
rRefresh list
sCycle sort mode

Git Operations

fFetch remotes
pPull from remote
PPush to remote
mMerge upstream

External Apps

oOpen in editor
tOpen in terminal
yCopy path to clipboard
cOpen config

Ready to simplify your workflow?

Start managing Git worktrees the easy way.