Branches are working contexts.
owt makes Git worktrees practical for daily development. Run it in the repo you already have, create isolated branch directories, and move between them without stashing, rebuilding, or losing editor state.
$ npm install -g oh-my-worktree
Stop treating branches like bookmarks.
Reviewing a PR, testing a hotfix, keeping a feature open, and checking main before release should not all compete for one checkout. With worktrees, each branch gets its own directory. owt gives that model a daily driver.
| Plain Git flow | owt flow |
|---|---|
| git worktree list | Visual list with status and PR state |
| git worktree add ../feat -b feat | Press a, pick the branch context |
| cd ../feature && git status | Press Enter to move your shell |
| git fetch && git pull | Press f, p, or P |
regular repo ├── my-app/ # run owt here └── ~/.owt/worktree/my-app/ ├── feature-auth/ └── hotfix-payment/ .bare workspace ├── .bare/ # optional ├── main/ └── review-pr-42/
Built for practical worktree use
The fast path for creating, reading, switching, and cleaning up branch contexts.
Branches as contexts
Keep a PR review, hotfix, feature, and main checkout open at the same time without stashing.
Fast TUI workflows
Create, delete, fetch, pull, push, merge, filter, and sort worktrees with single keystrokes.
Regular repos first
Run owt inside the repository you already have. New worktrees default under ~/.owt/worktree.
Optional .bare layout
Use owt clone when you want one project folder with sibling worktrees next to a hidden .bare repo.
Status and PR visibility
See dirty state, ahead/behind counts, last commit, and best-effort GitHub PR state before you switch.
Shell and app handoff
Press Enter to move your shell, o for editor, t for terminal, or y to copy the path.
Install, then open your current repo
Use npm for the packaged binary, npx for a one-off run, or build from source.
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
Install the shell helper once. After that, pressing Enter exits the TUI and moves your current shell into the selected worktree.
-
1
Run
owt setupto print the helper for your shell - 2 Add the function to your zsh, bash, or fish config
-
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 }
Daily actions stay on the keyboard
The common path is fast: move, add, delete, sync, merge, open, copy, and leave.
Navigation
Worktree Actions
Git Operations
External Apps
Make worktrees your default branch workflow.
Start in your existing repository, or clone into the optional .bare layout when sibling worktrees fit the project.