About
jj is a Git-compatible version control system that is both simple and powerful. See
the installation instructions to get started.
Breaking changes
-
Revset expressions like
hidden_id | description(x)now search the specified
hidden revision and its ancestors as well
as all visible revisions. -
Commit templates no longer normalize
descriptionby appending final newline
character. Usedescription.trim_end() ++ "\n"if needed.
Deprecations
- The
git.push-bookmark-prefixsetting is deprecated in favor of
templates.git_push_bookmark, which supports templating. The old setting can
be expressed in template as"<prefix>" ++ change_id.short().
New features
-
New
change_id(prefix)/commit_id(prefix)revset functions to explicitly
query commits by change/commit ID prefix. -
The
parents()andchildren()revset functions now accept an optional
depthargument. For instance,parents(x, 3)is equivalent tox---, and
children(x, 3)is equivalent tox+++. -
jj evologcan now follow changes from multiple revisions such as divergent
revisions. -
jj diffnow accepts-T/--templateoption to customize summary output. -
Log node templates are now specified in toml rather than hardcoded.
-
Templates now support
json(x)function to serialize values in JSON format. -
The ANSI 256-color palette can be used when configuring colors. For example,
colors."diff removed token" = { bg = "ansi-color-52", underline = false }
will apply a dark red background on removed words in diffs.
Fixed bugs
-
jj file annotatecan now process files at a hidden revision. -
jj op log --op-diffno longer fails at displaying "reconcile divergent
operations." #4465 -
jj util gc --expire=nownow passes the corresponding flag togit gc. -
change_id/commit_id.shortest()template functions now take conflicting
bookmark and tag names into account.
#2416 -
Fixed lockfile issue on stale file handles observed with NFS.
Packaging changes
aarch64-windowsbuilds (release binaries andmainsnapshots) are now provided.
Contributors
Thanks to the people who made this release happen!
- Anton Älgmyr (@algmyr)
- Austin Seipp (@thoughtpolice)
- Benjamin Brittain (@benbrittain)
- Cyril Plisko (@imp)
- Daniel Luz (@mernen)
- Gaëtan Lehmann (@glehmann)
- Gilad Woloch (@giladwo)
- Greg Morenz (@gmorenz)
- Igor Velkov (@iav)
- Ilya Grigoriev (@ilyagr)
- Jade Lovelace (@lf-)
- Jonas Greitemann (@jgreitemann)
- Josh Steadmon (@steadmon)
- juemrami (@juemrami)
- Kaiyi Li (@06393993)
- Lars Francke (@lfrancke)
- Martin von Zweigbergk (@martinvonz)
- Osama Qarem (@osamaqarem)
- Philip Metzger (@PhilipMetzger)
- raylu (@raylu)
- Scott Taylor (@scott2000)
- Vincent Ging Ho Yim (@cenviity)
- Yuya Nishihara (@yuja)