jj-vcs
jj (Jujutsu) Version Control
jj is a Git-compatible VCS with a different mental model. Most LLMs are trained primarily on git, so this skill provides the correct jj approach.
Critical differences from git
-
Working copy is always a commit - Every file change automatically amends the current working copy commit. There is no staging area, no
git add. -
Change ID vs Commit ID - Every commit has two identifiers:
- Change ID (e.g.,
kntqzsqt): Stable across rewrites, use this in commands - Commit ID (e.g.,
d7439b06): Changes when commit is modified (like git's SHA)
- Change ID (e.g.,
-
No staging area - Files are automatically tracked. Use
.gitignore(jj uses git's ignore format) andjj file untrack <path>to untrack. -
Commits are mutable - You can freely rewrite any commit. Rewriting pushed commits requires force push (
jj git pushhandles this automatically with lease protection). Conflicts don't block operations - they're stored in the commit. -
Bookmarks, not branches - jj uses "bookmarks" instead of git branches. They map 1:1 to git branches when pushing/fetching.
-
Colocated repos - When
.jjand.gitcoexist, every jj command auto-syncs with git. Git stays in detached HEAD state. Tools likeghCLI work normally.