---
name: jujutsu-vcs-pro
description: "Master jj (Jujutsu) — the Git-compatible VCS Google's using. Operations explained as you go. Handles jj branches, rebases, splits, and conflict resolution. Translates between Git and jj mental models so you don't have to relearn version control from scratch."
license: MIT
---

# Jujutsu VCS Pro

Jujutsu (`jj`) is a Git-compatible version control system that replaces the staging area with an always-editable working-copy commit and treats conflicts as first-class, recorded state. This skill is for developers who already know Git and want to adopt `jj` on existing Git repos without unlearning their instincts — it explains each command in Git terms as it runs them, and walks you through rebases, splits, and conflict resolution interactively.

## When to use it

- You've cloned `jj` onto a Git repo (`jj git init --colocate`) and aren't sure how `jj` maps onto your `git status` / `git rebase` muscle memory.
- You need to reorganize messy history — splitting a fat commit, reordering, or squashing — and want the operation translated and verified before it runs.
- A rebase produced conflicts and you want them resolved the `jj` way (edit files, then `jj resolve`) instead of an interactive Git mid-rebase state.
- You broke something and need `jj op log` / `jj op restore` (the operation log) to undo an entire prior action atomically.

## How it works

The skill drives the real `jj` CLI. Core commands it uses and narrates:

- **Status & history**: `jj st`, `jj log`, `jj log -r 'mine() & ::@'` with revset expressions.
- **Editing history**: `jj new`, `jj edit <rev>`, `jj describe`, `jj squash` (the `git commit --amend` / staging replacement), `jj split`.
- **Moving commits**: `jj rebase -s <source> -d <dest>`, `jj rebase -r` for single revisions.
- **Branches/bookmarks**: `jj bookmark create/set/move` (jj calls Git branches "bookmarks") and `jj git push` / `jj git fetch`.
- **Recovery**: `jj op log`, `jj op restore <op-id>`, `jj undo`.
- **Conflicts**: edits the marked files, then `jj resolve` (or `jj resolve --tool`).

## Example

```
curl -fsSL --create-dirs -o ~/.claude/skills/jujutsu-vcs-pro/SKILL.md https://claudeskil.com/skills/jujutsu-vcs-pro/SKILL.md

# Colocate jj alongside an existing Git repo
jj git init --colocate

# Split the last commit into two
jj split -r @-

# Move a feature onto the latest main and push it
jj rebase -s feature -d main@origin
jj bookmark set feature -r @
jj git push --bookmark feature
```

## Tips & gotchas

- There is **no staging area**. `@` *is* your working copy as a real commit; `jj squash` moves changes from `@` into its parent, which is how you "amend."
- Bookmarks don't move automatically when you commit (unlike Git branches). Run `jj bookmark set` before pushing or you'll push stale refs.
- Conflicts never block you — `jj` commits them with markers and lets descendants build on top. Resolve when convenient, not mid-operation.
- `jj undo` and `jj op restore` reverse *any* prior operation, including a bad `jj git fetch`. The op log is your safety net.

## FAQ

**Do I have to abandon Git?** No. With `--colocate`, `.git` stays usable; teammates see normal Git.

**What replaces `git add -p`?** `jj split` and `jj squash -i` open a diff editor to pick hunks.

**How do I detach a change to fix it?** `jj edit <rev>` makes any commit the working copy directly.
