jujutsu
Guide to Jujutsu (jj) version control system. Use when working with commits, branches, version control, rebasing, or when the user mentions jj, git, or version control operations.
When & Why to Use This Skill
This Claude skill provides a comprehensive guide and command reference for Jujutsu (jj), a modern, Git-compatible version control system. It helps developers streamline their workflow by explaining jj's unique working copy model, which eliminates the need for a staging area, and provides clear mappings from traditional Git commands to more efficient Jujutsu operations.
Use Cases
- Git-to-Jujutsu Transition: Helping developers quickly map familiar Git commands like 'status', 'commit', and 'stash' to their more powerful Jujutsu equivalents.
- Complex History Management: Assisting users in performing advanced version control tasks such as non-destructive rebasing, squashing commits, and utilizing stable Change IDs for better tracking.
- Workflow Optimization: Guiding developers on how to leverage the 'working copy as a commit' model to reduce manual overhead and focus on code changes rather than state management.
- Remote Collaboration: Providing specific instructions for syncing local Jujutsu workflows with remote Git repositories, including pushing bookmarks and fetching updates.
| name | jujutsu |
|---|---|
| description | Guide to Jujutsu (jj) version control system. Use when working with commits, branches, pull requests, PRs, version control, rebasing, pushing, or when the user mentions jj, git, or version control operations. |
Jujutsu (jj) Version Control Guide
Jujutsu is a modern, Git-compatible version control system. This project uses jj colocated with git.
Key Differences from Git
| Concept | Git | Jujutsu |
|---|---|---|
| Staging area | Explicit git add |
None - working copy IS a commit |
| Branches | Named refs | Bookmarks (auto-follow rewrites) |
| Stash | Separate stash stack | Not needed - just use commits |
| Amend | git commit --amend |
Just edit files, or use jj squash |
| Identity | Commit ID only | Change ID (stable) + Commit ID |
Essential Commands
| Task | Command |
|---|---|
| Status | jj status or jj st |
| Diff | jj diff |
| Log | jj log |
| Commit & continue | jj commit -m "message" |
| Update message | jj describe -m "message" |
| New empty commit | jj new |
| Squash into parent | jj squash |
| Undo last operation | jj undo |
| Fetch from remote | jj git fetch |
| Push to remote | jj git push |
| Create & push bookmark | jj git push --named name=@ |
| Push existing bookmark | jj git push --bookmark name |
Working Copy Model
The working copy (@) is always a commit. File changes are automatically tracked - no staging required.
parent commit
↓
@ (working copy) ← your edits go here automatically
Quick Git-to-Jujutsu Translation
| Git | Jujutsu |
|---|---|
git status |
jj st |
git diff |
jj diff |
git log |
jj log |
git add . && git commit -m "msg" |
jj commit -m "msg" |
git push |
jj git push |
git pull |
jj git fetch then jj rebase -d main@origin |
git checkout -b branch |
jj new main then jj bookmark set branch |
git branch |
jj bookmark list |
git stash |
jj new (just start new commit) |
git blame |
jj file annotate |
Additional References
- commands-reference.md - Complete command reference
- workflows.md - Common development workflows
- revsets.md - Revision selection syntax