Jujutsu (jj) Version Control
Agent Usage
When reading data from jj, always use
to avoid snapshotting the working copy (which is slow and unnecessary for read operations).
Non-interactive Commands (Critical)
Many jj commands spawn
or interactive diff tools by default.
These will hang indefinitely when run by agents. Always use the non-interactive alternatives:
| Command | Problem | Solution |
|---|
| Opens editor | Always use |
| Opens editor | Always use |
| Opens diff editor + may open editor for description | Provide filesets to select files; use for description |
| May open editor for combined description | Use or (use destination message) |
Commands to avoid entirely (no non-interactive mode):
- — use or edit files directly instead
- — use
jj config set <key> <value>
instead
- — use
jj sparse set --add <path>
or instead
- — edit conflict markers directly in files, or use /
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
flag for unified diff output:
bash
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
when running commands that may create conflicts:
bash
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
template:
bash
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
,
, and other commands that support
.
Common Commands
| Command | Description |
|---|
| Show working copy status |
| Show commit history |
| Create a new change |
| Set commit message |
| Squash into parent |
| Show changes |
| Push to remote |
| Fetch from remote |
| 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
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
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
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
directory is derived from the
jj (Jujutsu) project and is licensed under the
Apache License 2.0.