Jujutsu (jj) Version Control
Agent Usage
When reading data from jj, always use --ignore-working-copy to avoid snapshotting the working copy (which is slow and unnecessary for read operations).
Non-interactive Commands (Critical)
Many jj commands spawn $EDITOR or interactive diff tools by default. These will hang indefinitely when run by agents. Always use the non-interactive alternatives:
Command Problem Solution
jj describe
Opens editor Always use -m "message"
jj commit
Opens editor Always use -m "message"
jj split
Opens diff editor + may open editor for description Provide filesets to select files; use -m for description
jj squash
May open editor for combined description Use -m "message" or -u (use destination message)
Commands to avoid entirely (no non-interactive mode):
-
jj diffedit — use jj restore or edit files directly instead
-
jj config edit — use jj config set <key> <value> instead
-
jj sparse edit — use jj sparse set --add <path> or --remove <path> instead
-
jj resolve — edit conflict markers directly in files, or use --tool :ours / --tool :theirs
Agent-Friendly Output Formats
jj's default diff and conflict formats differ from Git's. For easier parsing, use Git-compatible formats:
Diffs: Use the --git flag for unified diff output:
jj diff --git jj log -p --git jj show --git
Conflicts: jj uses diff-based conflict markers by default (%%%%%%% , +++++++ ). For standard Git-style markers (<<<<<<< , ======= , >>>>>>> ), pass --config when running commands that may create conflicts:
jj --config ui.conflict-marker-style=git rebase ... jj --config ui.conflict-marker-style=git new --insert-before ...
The conflict style is applied when conflicts are materialized to the working copy, so the config must be set before the conflict occurs.
JSON: For structured/programmatic output, use the json(self) template:
jj log --ignore-working-copy --no-graph -T 'json(self) ++ "\n"'
Outputs one JSON object per line with commit_id, change_id, description, author, etc. Works with jj log , jj show , and other commands that support -T .
Common Commands
Command Description
jj status
Show working copy status
jj log
Show commit history
jj new
Create a new change
jj describe -m "msg"
Set commit message
jj squash
Squash into parent
jj diff
Show changes
jj git push
Push to remote
jj git fetch
Fetch from remote
jj bookmark create name
Create a bookmark
Topics
In-depth guides on jj concepts and syntax.
-
Bookmarks
-
Config
-
Filesets
-
Glossary
-
Revsets
-
Templates
-
Tutorial
Command Reference
Documentation generated from jj manpages. For details on any command, read the corresponding reference file.
Bisect
- jj-bisect-run
Bookmark
-
jj-bookmark-create
-
jj-bookmark-delete
-
jj-bookmark-forget
-
jj-bookmark-list
-
jj-bookmark-move
-
jj-bookmark-rename
-
jj-bookmark-set
-
jj-bookmark-track
-
jj-bookmark-untrack
Config
-
jj-config-edit
-
jj-config-get
-
jj-config-list
-
jj-config-path
-
jj-config-set
-
jj-config-unset
File
-
jj-file-annotate
-
jj-file-chmod
-
jj-file-list
-
jj-file-search
-
jj-file-show
-
jj-file-track
-
jj-file-untrack
General
-
jj
-
jj-abandon
-
jj-absorb
-
jj-bisect
-
jj-bookmark
-
jj-commit
-
jj-config
-
jj-describe
-
jj-diff
-
jj-diffedit
-
jj-duplicate
-
jj-edit
-
jj-evolog
-
jj-file
-
jj-fix
-
jj-gerrit
-
jj-git
-
jj-help
-
jj-interdiff
-
jj-log
-
jj-metaedit
-
jj-new
-
jj-next
-
jj-operation
-
jj-parallelize
-
jj-prev
-
jj-rebase
-
jj-redo
-
jj-resolve
-
jj-restore
-
jj-revert
-
jj-root
-
jj-show
-
jj-sign
-
jj-sparse
-
jj-split
-
jj-squash
-
jj-status
-
jj-tag
-
jj-undo
-
jj-unsign
-
jj-util
-
jj-version
-
jj-workspace
Gerrit
- jj-gerrit-upload
Git
-
jj-git-clone
-
jj-git-colocation
-
jj-git-colocation-disable
-
jj-git-colocation-enable
-
jj-git-colocation-status
-
jj-git-export
-
jj-git-fetch
-
jj-git-import
-
jj-git-init
-
jj-git-push
-
jj-git-remote
-
jj-git-remote-add
-
jj-git-remote-list
-
jj-git-remote-remove
-
jj-git-remote-rename
-
jj-git-remote-set-url
-
jj-git-root
Operation
-
jj-operation-abandon
-
jj-operation-diff
-
jj-operation-log
-
jj-operation-restore
-
jj-operation-revert
-
jj-operation-show
Simplify
- jj-simplify-parents
Sparse
-
jj-sparse-edit
-
jj-sparse-list
-
jj-sparse-reset
-
jj-sparse-set
Tag
-
jj-tag-delete
-
jj-tag-list
-
jj-tag-set
Util
-
jj-util-completion
-
jj-util-config-schema
-
jj-util-exec
-
jj-util-gc
-
jj-util-install-man-pages
-
jj-util-markdown-help
Workspace
-
jj-workspace-add
-
jj-workspace-forget
-
jj-workspace-list
-
jj-workspace-rename
-
jj-workspace-root
-
jj-workspace-update-stale
Generated from jj manpages (jj 0.37.0)
License
The content in the references/ directory is derived from the jj (Jujutsu) project and is licensed under the Apache License 2.0.