Breaking changes
-
The
jujutsuandjujutsu-libcrates were renamed tojj-cliandjj-lib,
respectively. -
The
ui.oplog-relative-timestampsoption has been removed. Use the
format_time_range()template alias instead. For details, see
the documentation. -
Implicit concatenation of template expressions has been disabled. Use
++operator,concat(), orseparate()function instead.
Example:description ++ "\n" -
jj git pushwill consider pushing the parent commit only when the
current commit has no content and no description, such as right after
ajj squash. -
The minimum supported Rust version (MSRV) is now 1.64.0.
-
The
heads()revset function was split up into two functions.heads()
without arguments is now calledvisible_heads().heads()with one argument
is unchanged. -
The
ui.default-revsetconfig was renamed torevsets.log. -
The
jj sparsecommand was split up intojj sparse listand
jj sparse set. -
jj hide(alias forjj abandon) is no longer available. Usejj abandon
instead. -
jj debug completion,jj debug mangenandjj debug config-schemahave
been moved fromjj debugtojj util. -
jjwill no longer parsebras a git_refrefs/heads/brwhen a branchbr
does not exist but the git_ref does (this is rare). Usebr@gitinstead. -
jj git fetchwill no longer import unrelated branches from the underlying
Git repo.
New features
-
jj git push --deletedwill remove all locally deleted branches from the remote. -
jj restorewithout--fromworks correctly even if@is a merge
commit. -
jj rebasenow accepts multiple-sand-barguments. Revsets with
multiple commits are allowed with--allow-large-revsets. -
jj git fetchnow supports a--branchargument to fetch some of the
branches only. -
jj config getcommand allows retrieving config values for use in scripting. -
jj config setcommand allows simple config edits like
jj config set --repo user.email "somebody@example.com" -
Added
ui.log-word-wrapoption to wrapjj log/obslog/op logcontent
based on terminal width. #1043 -
Nodes in the (text-based) graphical log output now use a
◉symbol instead
of the lettero. The ASCII-based graph styles still useo. -
Commands that accept a diff format (
jj diff,jj interdiff,jj show,
jj log, andjj obslog) now accept--typesto show only the type of file
before and after. -
jj describenow supports--reset-authorfor resetting a commit's author
to the configured user.jj describealso gained a--no-editoption to
avoid opening the editor. -
Added
latest(x[, n])revset function to select the latestncommits. -
Added
conflict()revset function to select commits with conflicts. -
jj squashAKAjj amendnow accepts a--messageoption to set the
description of the squashed commit on the command-line. -
The progress display on
jj git clone/fetchnow includes the downloaded size. -
The formatter now supports a "default" color that can override another color
defined by a parent style. -
jj obslogandjj lognow show abandoned commits as hidden. -
jj git fetchandjj git pushwill now use the single defined remote even
if it is not named "origin". -
jj git pushnow accepts--branchand--changearguments together. -
jj git pushnow accepts a-r/--revisionsflag to specify revisions to
push. All branches pointing to any of the specified revisions will be pushed.
The flag can be used together with--branchand--change. -
jjwith no subcommand now defaults tojj loginstead of showing help. This
command can be overridden by settingui.default-command. -
Description tempfiles created via
jj describenow have the file extension
.jjdescriptionto help external tooling detect a unique filetype. -
The shortest unique change ID prefixes and commit ID prefixes in
jj logare
now shorter within the default log revset. You can override the default by
setting therevsets.short-prefixesconfig to a different revset. -
The last seen state of branches in the underlying git repo is now presented by
jj branch list/jj logas a remote calledgit(e.g.main@git). They can
also be referenced in revsets. Such branches exist in colocated repos or if
you usejj git export. -
The new
jj chmodcommand allows setting or removing the executable bit on
paths. Unlike the POSIXchmod, it works on Windows, on conflicted files, and
on arbitrary revisions. Bits other than the executable bit are not planned to
be supported. -
jj sparse setnow accepts an--editflag which brings up the$EDITORto
edit sparse patterns. -
jj branch listcan now be filtered by revset. -
Initial support for the Watchman filesystem monitor. Set
core.fsmonitor = "watchman"in your repo to enable.
Fixed bugs
-
Modify/delete conflicts now include context lines
#1244. -
It is now possible to modify either side of a modify/delete conflict (any
change used to be considered a resolution). -
Fixed a bug that could get partially resolved conflicts to be interpreted
incorrectly. -
jj git fetch: when re-adding a remote repository that had been previously
removed, in some situations the remote branches were not recreated. -
jj git remote rename: the git remote references were not rewritten with
the new name. If a new remote with the old name and containing the same
branches was added, the remote branches may not be recreated in some cases. -
jj workspace update-stalenow snapshots the working-copy changes before
updating to the new working-copy commit. -
It is no longer allowed to create branches at the root commit.
-
git checkout(without usingjj) in colocated repo no longer abandons
the previously checked-out anonymous branch.
#1042. -
jj git fetchin a colocated repo now abandons branches deleted on the
remote, just like in a non-colocated repo.
#864 -
jj git fetchcan now fetch forgotten branches even if they didn't move on
the remote.
#1714
#1771 -
It is now possible to
jj branch forgetdeleted branches.
#1537 -
Fixed race condition when assigning change id to Git commit. If you've
already had unreachable change ids, runjj debug reindex.
#924 -
Fixed false divergence on racy working-copy snapshots.
#697,
#1608 -
In colocated repos, a bug causing conflicts when undoing branch moves (#922)
has been fixed. Some surprising behaviors related to undoingjj git pushor
jj git fetchremain.
Contributors
Thanks to the people who made this release happen!
- Aaron Bull Schaefer (@elasticdog)
- Anton Bulakh (@necauqua)
- Austin Seipp (@thoughtpolice)
- Benjamin Saunders (@Ralith)
- B Wilson (@xelxebar)
- Christophe Poucet (@poucet)
- David Barnett (@dbarnett)
- Glen Choo (@chooglen)
- Grégoire Geis (@71)
- Ilya Grigoriev (@ilyagr)
- Isabella Basso (@isinyaaa)
- Kevin Liao (@kevincliao)
- Martin von Zweigbergk (@martinvonz)
- mlcui (@mlcui-google)
- Samuel Tardieu (@samueltardieu)
- Tal Pressman (@talpr)
- Vamsi Avula (@avamsi)
- Waleed Khan (@arxanas)
- Yuya Nishihara (@yuja)