LinuxCommandLibrary

jj

Manage code revisions

TLDR

Update description of the revisions specified by given revsets (e.g. B::D, A..D, B|C|D, etc.)

$ jj [[desc|describe]] [[-m|--message]] "[message]" [[-r|--revision]] [revsets]
copy

Create a new commit/revision on top of a given revision
$ jj new [revset]
copy

Create a new merge commit on top of multiple revisions
$ jj new [revset1 revset2 ...]
copy

Update the working copy to point to a revision
$ jj edit [revset]
copy

Undo the previous command (which may itself have been undo)
$ jj undo
copy

Execute a jj subcommand without snapshotting the working copy
$ jj --ignore-working-copy [subcommand]
copy

Execute a jj subcommand at an operation
$ jj [[--at-op|--at-operation]] [operation] [subcommand]
copy

Display help for a specific subcommand (like new, commit, desc, etc.)
$ jj help [subcommand]
copy

SYNOPSIS

jj [GLOBAL OPTIONS]... <SUBCOMMAND> [<ARGS>]...

PARAMETERS

-R, --repository <PATH>
    Path to repository (default: current directory or JJ_CONFIG_REPO)

-r, --at-op <OPERATION>
    Database operation to view workspace at (default: @)

-c, --color <WHEN>
    Colorize output: never, auto (default), always

--pager <WHEN>
    Use pager: never, auto (default), always

--git-config [<KEY>=<VALUE>]...
    Set Git config key-value pairs for this invocation

-h, --help
    Print help information

-V, --version
    Print version information

DESCRIPTION

Jujutsu (jj) is a next-generation, Git-compatible distributed version control system (VCS) focused on improving developer workflows. Unlike Git's commit-centric model, jj treats Git commits as views on an underlying operation log, enabling automatic rebasing, easier conflict resolution, and immutable history. It supports Git interop out-of-the-box: you can clone, push, and pull with Git repos seamlessly.

Key features include:
Operation-based history: Changes are recorded as operations, making history linear and bisectable.
Revsets: Powerful query language for revisions, similar to Mercurial.
Built-in tools: jj log for DAG visualization, jj diff with hunk editing, and jj describe for changelists.
Concurrency-safe: No locking issues during parallel operations.

Designed for large repos and teams, jj reduces context-switching by handling common Git pains like rebase/merge churn. It's written in Rust for performance and is actively developed with growing adoption at companies like Google.

CAVEATS

Relatively new tool; lacks some Git features like submodules. Building from source requires Rust toolchain. Git interop is read/write but may need git for advanced ops.

COMMON SUBCOMMANDS

jj init: Initialize repo.
jj status: Show working copy status.
jj log: Visualize commit graph.
jj new: Create new change.
jj diff: Show changes with editing support.

INSTALLATION

Pre-built binaries on GitHub releases. Distro packages emerging (e.g., Fedora, Arch). cargo install jj-cli for Rust users.

HISTORY

Created in 2021 by Martin von Zweigbergk (Google) as a Git alternative. First stable release in 2023. Inspired by Git, Mercurial, and Sapling. Open-source under Apache 2.0/MIT; rapidly evolving with community contributions.

SEE ALSO

git(1), hg(1)

Copied to clipboard