| name | jj-vcs |
| description | Jujutsu (jj) is a powerful Git-compatible version control system with innovative features like automatic rebasing, working-copy-as-a-commit, operation log with undo, and first-class conflict tracking. This skill is triggered when the user says things like "use jj", "run jj commands", "jujutsu version control", "migrate from git to jj", "jj rebase", "jj squash", "jj log", or "help with jj workflow". |
Jujutsu (jj) Version Control System
Jujutsu is a next-generation version control system that uses Git repositories as storage while providing a fundamentally different and more powerful user experience. This skill includes the complete official documentation from the jj repository.
Quick Start: Read tutorial.md for hands-on introduction. See git-comparison.md for Git users migrating to jj.
What is Jujutsu?
Jujutsu (command: jj) is a VCS designed to be easy to use for both beginners and experienced users. Key innovations include:
- Working-copy-as-a-commit: Changes are automatically recorded as commits and amended on each change
- Operation log & undo: Every operation is recorded and can be undone (like version control for your version control!)
- Automatic rebase: When you modify a commit, descendants are automatically rebased
- First-class conflicts: Conflicts are tracked as objects and can be committed, resolved later, and propagated
- No staging area: Simplified workflow without Git's index/staging complexity
- Git compatible: Works with existing Git repositories and forges like GitHub
Documentation Structure
Getting Started
- README.md - Project overview, key features, and introduction
- index.md - Documentation homepage with useful links
- install-and-setup.md - Installation instructions for all platforms and initial configuration
- tutorial.md - Comprehensive hands-on tutorial (assumes Git knowledge)
- FAQ.md - Frequently asked questions and common issues
- glossary.md - Definitions of jj-specific terminology
Core Concepts
- working-copy.md - How the working copy works as a commit
- operation-log.md - Understanding the operation log and undo functionality
- conflicts.md - How jj handles merge conflicts as first-class objects
- revsets.md - Powerful language for selecting revisions (like Mercurial revsets)
- templates.md - Customizing output formatting with the template language
- bookmarks.md - Working with bookmarks (similar to Git branches)
- filesets.md - Language for selecting files
Configuration
- config.md - Complete configuration reference and options
- config.toml - Example configuration file
- cli-reference.md - Command-line interface reference
Git Integration
- git-compatibility.md - How jj works with Git repositories and Git features
- git-comparison.md - Comparison of jj vs Git workflows and commands
- git-command-table.md - Quick reference table mapping Git commands to jj equivalents
- github.md - Working with GitHub repositories and pull requests
- gerrit.md - Working with Gerrit code review system
Guides
- guides/divergence.md - Understanding and resolving divergent changes
- guides/multiple-remotes.md - Working with multiple remote repositories
Technical Documentation
- technical/architecture.md - High-level architecture and design decisions
- technical/concurrency.md - How jj handles concurrent operations safely
- technical/conflicts.md - Technical details of conflict handling
Development and Contributing
- contributing.md - How to contribute to jj development
- code-of-conduct.md - Community code of conduct
- core_tenets.md - Core principles guiding jj's design
- roadmap.md - Development roadmap and planned features
- community_tools.md - Community-maintained tools and integrations
- releasing.md - Release process documentation
- design_docs.md - Index of design documents
- design_doc_blueprint.md - Template for writing design docs
Comparisons and Context
- sapling-comparison.md - Comparison with Meta's Sapling VCS
- related-work.md - Other related version control systems
- testimonials.md - User testimonials and experiences
Platform-Specific
- windows.md - Windows-specific considerations and setup
Project Information
- CHANGELOG.md - Version history and release notes
- GOVERNANCE.md - Project governance structure
- SECURITY.md - Security policy and reporting
Common Usage Patterns
When the user asks to:
- Get started with jj → Check
tutorial.mdandinstall-and-setup.md - Migrate from Git → Check
git-comparison.mdandgit-command-table.md - Understand a concept → Check
glossary.mdand relevant concept docs (working-copy, conflicts, etc.) - Configure jj → Check
config.md - Work with GitHub → Check
github.md - Select revisions → Check
revsets.md - Customize output → Check
templates.md - Handle conflicts → Check
conflicts.md - Troubleshoot issues → Check
FAQ.md - Undo a mistake → Check
operation-log.md - Understand architecture → Check
technical/architecture.md
Quick Command Reference
Basic Operations
# Clone a Git repository
jj git clone <url>
# Check status
jj st # or jj status
# Create a new change
jj new
# Edit a change description
jj describe
# Show change log
jj log
# Undo last operation
jj undo
# Show operation log
jj op log
Working with Changes
# Abandon a change
jj abandon
# Move changes between commits
jj squash # move changes into parent
jj move # move changes to another commit
# Rebase changes
jj rebase -r <revision> -d <destination>
# Resolve conflicts
jj resolve # interactive conflict resolution
Git Integration
# Fetch from Git remote
jj git fetch
# Push to Git remote
jj git push
# Import Git branches as bookmarks
jj bookmark track <name>@<remote>
Selecting Revisions (Revsets)
# Common revset expressions
@ # working copy commit
@- # parent of working copy
main@origin # bookmark from remote
::@ # ancestors of working copy
@:: # descendants of working copy
~empty() # non-empty changes
Key Concepts to Understand
Working Copy as Commit
- The working copy is always a commit (shown as
@) - Changes are automatically committed as you work
- No explicit
commitcommand needed (usejj describeto add a message) - Use
jj newto start a new change
Revsets
- Powerful language for selecting commits (similar to Mercurial)
- Used in many commands:
jj log -r,jj show,jj rebase, etc. - Supports boolean operations, functions, and composition
- See
revsets.mdfor complete reference
Operation Log
- Every jj operation is recorded (commit, rebase, push, etc.)
- Use
jj op logto see operation history - Use
jj undoto undo the last operation - Use
jj op restoreto restore to any previous state
Bookmarks vs Branches
- jj uses "bookmarks" which are similar to Git branches but simpler
- Changes can exist without bookmarks (anonymous branches)
- Bookmarks are just pointers, not required for workflow
- Git branches are imported as bookmarks
Conflicts
- Conflicts are stored in commits, not just in working copy
- You can commit conflicted changes and resolve later
- Conflict resolution is propagated through rebases
- Use
jj resolvefor interactive resolution
File Organization
- README.md - Main project README with overview
- docs/ - All documentation files
- tutorial.md - Getting started tutorial
- config.md - Configuration reference
- revsets.md - Revset language reference
- templates.md - Template language reference
- git-*.md - Git integration documentation
- guides/ - How-to guides for specific workflows
- technical/ - Technical architecture documentation
- design/ - Design documents for features
Tips
- Start with the tutorial to understand the jj mental model
- Use
jj help <command>for detailed command help - The operation log is your safety net - don't be afraid to experiment
- Revsets are powerful - learn them to work efficiently
- Conflicts are normal and can be handled gracefully
- jj works best when you embrace its philosophy (working-copy-as-commit, auto-rebase)
- Check the FAQ when you encounter unexpected behavior
- Use templates to customize
jj logoutput to your preferences
Important Notes
- Jujutsu is experimental but actively developed and used daily by its developers
- Git compatibility is stable - safe to use with existing Git workflows
- Some features are experimental (check README warnings)
- Breaking changes may occur but are documented in CHANGELOG
- Community is active on Discord, GitHub Discussions, and IRC (#jujutsu on Libera Chat)
Resources
- Homepage: https://jj-vcs.github.io/jj
- GitHub: https://github.com/jj-vcs/jj
- Discord: https://discord.gg/dkmfj3aGQN
- Documentation: https://jj-vcs.github.io/jj/latest/
- Tutorial by Steve Klabnik: https://steveklabnik.github.io/jujutsu-tutorial/
- Chris Krycho's YouTube series: https://www.youtube.com/playlist?list=PLelyiwKWHHAq01Pvmpf6x7J0y-yQpmtxp