v0.28.0
Important
v0.28.0 was yanked from https://crates.io and superseded by v0.28.1.
About
jj is a Git-compatible version control system that is both simple and powerful. See the installation instructions to get started.
Release highlights
-
jj's configuration can now be split into multiple files more easily.
-
jj resolvenow accepts built-in tools:oursand:theirs. -
In colocated repos, newly-created files will now appear in
git diff. -
A long-standing bug relating to empty files in the built-in diff editor was
fixed. #3702
Breaking changes
-
The minimum supported Rust version (MSRV) is now 1.84.0.
-
The
git.push-branch-prefixconfig has been removed in favor of
git.push-bookmark-prefix. -
jj abandonno longer supports--summaryto suppress the list of abandoned
commits. The list won't show more than 10 commits to not clutter the console. -
jj unsquashhas been removed in favor ofjj squashand
jj diffedit --restore-descendants. -
The
jj untracksubcommand has been removed in favor ofjj file untrack. -
The following deprecated revset functions have been removed:
branches(),remote_branches(),tracked_remote_branches(), and
untracked_remote_branches(), which were renamed to "bookmarks".file()andconflict(), which were renamed to plural forms.files(x, y, ..)with multiple patterns. Usefiles(x|y|..)instead.
-
The following deprecated template functions have been removed:
branches(),local_branches(), andremote_branches(), which were
renamed to "bookmarks".
-
The flags
--alland--trackedonjj git pushby themself do not cause
deleted bookmarks to be pushed anymore, as an additional safety measure. They
can now be combined with--deletedinstead.
Deprecations
-
core.watchman.register_snapshot_triggerhas been renamed tocore.watchman.register-snapshot-triggerfor consistency with other configuration options. -
jj backoutis deprecated in favor ofjj revert.
New features
-
jj signcan now sign with PKCS#12 certificates through thegpgsmbackend. -
jj signwill automatically use the gpg key associated with the author's email
in the absence of asigning.keyconfiguration. -
Multiple user configs are now supported and are loaded in the following precedence order:
$HOME/.jjconfig.toml$XDG_CONFIG_HOME/jj/config.toml$XDG_CONFIG_HOME/jj/conf.d/*.toml
-
The
JJ_CONFIGenvironment variable can now contain multiple paths separated
by a colon (or semicolon on Windows). -
The command
jj config listnow supports showing the origin of each variable
via thebuiltin_config_list_detailedtemplate. -
jj config {edit,set,unset}now prompt when multiple config files are found. -
jj diff -rnow allows multiple revisions (as long as there are no gaps in
the revset), such asjj diff -r 'mutable()'. -
jj git pushnow accepts a--named NAME=REVISIONargument to create a named
bookmark and immediately push it. -
The 'how to resolve conflicts' hint that is shown when conflicts appear can
be hidden by settinghints.resolving-conflicts = false. -
jj op diffandjj op log --op-diffnow show changes to which commits
correspond to working copies. -
jj op log -dis now an alias forjj op log --op-diff. -
jj bookmark move --to/--fromcan now be abbreviated tojj bookmark move -t/-f -
jj bookmark listnow supports--sortoption. Similar togit branch --sort.
Seejj bookmark list --helpfor more details. -
A new command
jj revertis added, which is similar tojj backoutbut
adds the--destination,--insert-after, and--insert-beforeoptions to
customize the location of reverted commits. -
A new command
jj git rootis added, which prints the location of the Git
directory of a repository using the Git backend. -
In colocated repos, any files that jj considers added in the working copy will
now show up ingit diff(as if you had rungit add --intent-to-addon
them). -
Reversing colors is now supported. For example, to highlight words by
reversing colors rather than underlining, you can set
colors."diff token"={ underline = false, reverse = true }in your config. -
Added
revsets.log-graph-prioritize, which can be used to configure
which branch in thejj loggraph is displayed on the left instead of@
(e.g.coalesce(description("megamerge\n"), trunk())) -
jj resolvenow accepts new built-in merge tools:oursand:theirs.
These merge tools accept side #1 and side #2 of the conflict respectively.
Fixed bugs
-
jj log -p --statnow shows diff stats as well as the default color-words/git
diff output. #5986 -
The built-in diff editor now correctly handles deleted files.
#3702 -
The built-in diff editor now correctly retains the executable bit on newly
added files when splitting. #3846 -
jj config set/--configvalue parsing rule is relaxed in a way that
unquoted apostrophes are allowed.
#5748 -
jj fixcould previously create new conflicts when a descendant of a fixed
revision was already correctly formatted.
Contributors
Thanks to the people who made this release happen!
- Aleksey Kuznetsov (@zummenix)
- Anton Älgmyr (@algmyr)
- Austin Seipp (@thoughtpolice)
- Baltasar Dinis (@bsdinis)
- Benjamin Tan (@bnjmnt4n)
- Brandon Hall (@tenkabuto)
- Caleb White (@calebdw)
- Daniel Luz (@mernen)
- David Rieber (@drieber)
- demize (@demize)
- Emily (@emilazy)
- Evan Mesterhazy (@emesterhazy)
- Fedor Sheremetyev (@sheremetyev)
- George Christou (@gechr)
- Ilya Grigoriev (@ilyagr)
- Jakob Hellermann (@jakobhellermann)
- Jo Liss (@joliss)
- Joachim Desroches (@jedesroches)
- Johannes Altmanninger (@krobelus)
- Jonathan Gilchrist (@jgilchrist)
- Kenyon Ralph (@kenyon)
- Lucas Garron (@lgarron)
- Martin von Zweigbergk (@martinvonz)
- Nick Pupko (@npupko)
- Philip Metzger (@PhilipMetzger)
- Raphael Borun Das Gupta (@das-g)
- Remo Senekowitsch (@senekor)
- Robin Stocker (@robinst)
- Scott Taylor (@scott2000)
- Siva Mahadevan (@svmhdvn)
- Vincent Ging Ho Yim (@cenviity)
- Yuya Nishihara (@yuja)