config/claude/skills/jj-version-control/SKILL.md
How to use `jj`, the Jujutsu version control system
npx skillsauth add ahmedelgabri/dotfiles jj-version-controlInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
jj)Jujutsu (or, simply, jj) is a Git-compatible version control system that is
usually used in "colocated" form (that is, alongside the .git directory in the
repository, there will also be a .jj directory; the presence of the latter can
be used to infer that you are in a jj repository). When in a jj repository,
you can still use Git commands to examine objects in the repository (for
example, commands like git show, git log, and git grep) but when creating
commits you should use jj commands.
Jujutsu's most distinctive feature is that it does not have a staging area. Any
time you run a jj command, it will automatically create a snapshot of the
working directory. jj respects .gitignore files and will not include them in
snapshots. To stop tracking a file that was unintentionally included in a
snapshot, modify .gitignore then use jj file untrack <file>....
| Command | Description |
| --------------- | --------------------------------------------------------- |
| jj st | Show summary of working copy changes |
| jj diff | Show diff of working copy changes |
| jj diff --git | Show git Git-compatible diff of working copy changes |
| jj log | Show graph of commits (by default, only unpushed commits) |
| jj evolog | Show previous states (analogous to git reflog) |
| jj op log | Show previous operations |
| Revset | Header |
| -------- | ----------------------------------- |
| @ | Current revision (working copy) |
| @- | Parent of current revision |
| a- | Parent(s) of a |
| a-- | Grandparent(s) of a |
| a+ | Child(ren) of a |
| ::a | Ancestors of a (including a) |
| a:: | Descendents of a (including a) |
| a..b | Reachable from b but not from a |
| a \| b | Union of a and b |
| a & b | Intersection of a and b |
| ~a | Not in a |
For specific details on selecting which changes to include in a commit, and how
to craft commit messages, see the /commit skill.
Note that you will never run jj commit without file arguments unless your user
instructs you to do so; instead pass explicit files to be included.
| Command | Description |
| --------------------- | -------------------------------------------------------------------- |
| jj commit <file>... | Create a commit containing specific changes |
| jj split <file>... | Create a commit containing specific changes (also updates bookmarks) |
| Command | Description |
| ------------------------------- | ------------------------- |
| jj git fetch | Fetch from default remote |
| jj git fetch --all-remotes | Fetch from all remotes |
| jj git push | Push to default remote |
| jj git push --remote <remote> | Push to a named remote |
Your user has defined a number of useful aliases and commands in
~/.config/jj/config.toml, including:
| Alias or command | Description |
| ---------------- | ---------------------------------------------------------------- |
| jj gr | Roughly equivalent to git log --oneline --graph |
| jj o | Roughly equivalent to git log --oneline |
| jj oo | Roughly equivalent to git log --oneline -10 |
| jj last | Show latest non-empty change with a non-empty description |
| jj tug | Fast-forward closest bookmark to point at recent pushable change |
development
Interact with Neovim via RPC to annotate code, navigate files, and do walkthroughs
tools
Create a commit (or draft a commit message) in a Jujutsu repository
tools
Create a commit (or draft a commit message) in a Git repository
tools
Review a GitHub pull request, examining the summary, linked resources, and diff