About
jj is a Git-compatible version control system that is both simple and powerful. See
the installation instructions to get started.
Release highlights
-
Support for uploading changes to Gerrit Code Review with
jj gerrit upload
.
This lets you submit trees or multiple stacks of work at once. Support
for fetching changes, submitting changes, and other operations is not yet
implemented. This should be considered experimental, and we welcome feedback
on using it. -
Support for automated bisection using
jj bisect run
; this will continuously
bisect a commit range until a given commit is found to trigger a bug.
Breaking changes
-
Git-based repositories are now colocated by default. Configure
git.colocate = false
to keep the previous behavior. -
Conflicts written by jj < 0.11 are no longer supported. They will now appear
as regular files with a.jjconflict
suffix and JSON contents. -
The minimum supported Rust version (MSRV) is now 1.88.
Deprecations
-
Various flags on
jj describe
andjj commit
have been deprecated in favor
ofjj metaedit
. They are:describe
:--author
,--reset-author
,--no-edit
commit
:--author
,--reset-author
-
The storage format of remote bookmarks and tags has changed. Remote bookmarks
will be written in both old and new formats to retain forward compatibility.
Git-tracking tags are also recorded for future native tagging support. This
change should be transparent, but let us know if you see anything odd.
New features
-
The new command
jj bisect run
uses binary search to find a commit that
introduced a bug. -
The default editor on Unix is now
nano
instead ofpico
. -
New config option
merge.hunk-level = "word"
to enable word-level merging. -
New config option
merge.same-change = "keep"
to disable lossy resolution
rule for same-change conflicts.
#6369 -
Templates now support a
replace()
method on strings for pattern-based
string replacement with optional limits. Supports all string patterns, including
regex with capture groups (e.g."hello world".replace(regex:'(\w+) (\w+)', "$2 $1")
). -
A new builtin
hyperlink(url, text)
template alias creates clickable
hyperlinks using OSC8 escape sequences
for terminals that support them. -
Added a new conditional configuration
--when.platforms
to include
settings only on certain platforms. -
External diff commands now support substitution variable
$width
for the
number of available terminal columns. -
The new
jj gerrit upload
command allows you to upload given revisions to an
instance of Gerrit Code Review. -
jj bookmark create/set/move
use the working copy as a default again and
no longer require an explicit revision argument. This walks back a
deprecation fromjj 0.26
, as the community feedback was mostly negative. -
The revset function
exactly(x, n)
will now evaluatex
and error if it does
not have exactlyn
elements. -
jj util exec
now matches the exit status of the program it runs, and
doesn't print anything. -
jj config get
now supports displaying array and table config values. -
jj util exec
sets the environment variableJJ_WORKSPACE_ROOT
Fixed bugs
- Fetching repositories that have submodules no longer errors even if
submodule.recurse=true
is set in.gitconfig
(but jj still isn't able to
fetch the submodules or to operate on them).
Contributors
Thanks to the people who made this release happen!
- Angel Ezquerra (@AngelEzquerra)
- Anton Älgmyr (@algmyr)
- Antonin Delpeuch (@wetneb)
- Austin Seipp (@thoughtpolice)
- Benjamin Tan (@bnjmnt4n)
- Conner Petzold (@ConnerPetzold)
- Daniel Luz (@mernen)
- Daniele Sassoli (@DanieleSassoli)
- David Barsky (@davidbarsky)
- Dinu Blanovschi (@dnbln)
- Gaëtan Lehmann (@glehmann)
- George Christou (@gechr)
- Ian Wrzesinski (@isuffix)
- Ilya Grigoriev (@ilyagr)
- Isaac Corbrey (@icorbrey)
- Ivan Petkov (@ipetkov)
- Jonas Fierlings (@PigeonF)
- loudgolem (@phanirithvij)
- Martin von Zweigbergk (@martinvonz)
- Matt Stark (@matts1)
- Matt T. Proud (@matttproud)
- Michael Pratt (@prattmic)
- MochikoNyan (@MochikoNyan)
- Philip Metzger (@PhilipMetzger)
- Reilly Brogan (@ReillyBrogan)
- Remo Senekowitsch (@senekor)
- Reuven Lazarus (@rlazarus)
- Scott Taylor (@scott2000)
- Stephen Jennings (@jennings)
- Steven Sherry (@Steven0351)
- Theo Buehler (@botovq)
- Yuya Nishihara (@yuja)