About
jj is a Git-compatible version control system that is both simple and powerful. See the installation instructions to get started.
Release highlights
git.subprocess
is now enabled by default, improving compatibility with Git
fetches and pushes by spawning an externalgit
process. Users can opt out
of this by settinggit.subprocess = false
, but this will likely be removed
in a future release. Please report any issues you run into.
Breaking changes
-
Bookmark name to be created/updated is now parsed as a revset
symbol. Quotation may be needed in addition to shell
quotes. Example:jj bookmark create -r@- "'name with space'"
-
jj bookmark create
,jj bookmark set
andjj bookmark move
onto a hidden
commit make it visible. -
jj bookmark forget
now untracks any corresponding remote bookmarks instead
of forgetting them, since forgetting a remote bookmark can be unintuitive.
The old behavior is still available with the new--include-remotes
flag. -
jj fix
now always sets the working directory of invoked tools to be the
workspace root, instead of the working directory of thejj fix
. -
The
ui.allow-filesets
configuration option has been removed.
The "fileset" language has been enabled by default since v0.20. -
templates.annotate_commit_summary
is renamed totemplates.file_annotate
,
and now has an implicitself
parameter of typeAnnotationLine
, instead of
Commit
. All methods onCommit
can be accessed withcommit.method()
, or
self.commit().method()
.
Deprecations
-
This release takes the first steps to make target revision required in
bookmark create
,bookmark move
andbookmark set
. Those commands will display
a warning if the user does not specify target revision explicitly. In the near
future those commands will fail if target revision is not specified. -
The
signing.sign-all
config option has been deprecated in favor of
signing.behavior
. The new option acceptsdrop
(never sign),keep
(preserve
existing signatures),own
(sign own commits), orforce
(sign all commits).
Existingsigning.sign-all = true
translates tosigning.behavior = "own"
, and
false
translates to"keep"
. Invalid configuration is now an error.
New features
-
The new
jj sign
andjj unsign
commands allow for signing/unsigning commits.
jj sign
supports configuring the default revset throughrevsets.sign
when
no--revisions
arguments are provided. -
jj git fetch
now supports string pattern syntax
on--remote
option andgit.fetch
configuration. -
Template functions
truncate_start()
andtruncate_end()
gained an optional
ellipsis
parameter; passing this prepends or appends the ellipsis to the
content if it is truncated to fit the maximum width. -
Templates now support
stringify(x)
function and string method
.escape_json()
. The latter serializes the string in JSON format. It is
useful for making machine-readable templates by escaping problematic
characters like\n
. -
Templates now support
trim()
,trim_start()
andtrim_end()
methods
which remove whitespace from the start and end of aString
type. -
The description of commits backed out by
jj backout
can now be configured
usingtemplates.backout_description
. -
New
AnnotationLine
templater type. Used intemplates.file_annotate
.
Providesself.commit()
,.content()
,.line_number()
, and
.first_line_in_hunk()
. -
Templates now have
format_short_operation_id(id)
function for users to
customize the default operation id representation. -
The
jj init
/jj revert
stubs that print errors can now be overridden with
aliases. All ofjj clone/init/revert
add a hint to a generic error. -
Help text is now colored (when stdout is a terminal).
-
Commands that used to suggest
--ignore-immutable
now print the number of
immutable commits that would be rewritten if used and a link to the docs. -
jj undo
now shows a hint when undoing an undo operation that the user may
be looking forjj op restore
instead.
Fixed bugs
-
jj status
now shows untracked files under untracked directories.
#5389 -
Added workaround for the bug that untracked files are ignored when watchman is
enabled. #5728 -
The
signing.backends.ssh.allowed-signers
configuration option will now
expand~/
to$HOME/
.
#5626 -
config-schema.json
now allows arrays of strings for the settingsui.editor
andui.diff.tool
. -
config-schema.json
now allows an array of strings or nested table for the
ui.pager
setting.
Contributors
Thanks to the people who made this release happen!
- Alain Leufroy (@aleufroy)
- Aleksey Kuznetsov (@zummenix)
- Alexander Mikhailov (@AM5800)
- Andrew Gilbert (@andyg0808)
- Antoine Martin (@alarsyo)
- Anton Bulakh (@necauqua)
- Austin Seipp (@thoughtpolice)
- Baltasar Dinis (@bsdinis)
- Benjamin Tan (@bnjmnt4n)
- Bryce Berger (@bryceberger)
- Burak Varlı (@unexge)
- David Rieber (@drieber)
- Emily (@emilazy)
- Evan Mesterhazy (@emesterhazy)
- George Christou (@gechr)
- HKalbasi (@HKalbasi)
- Ilya Grigoriev (@ilyagr)
- Jacob Hayes (@JacobHayes)
- Jonathan Frere (@MrJohz)
- Jonathan Tan (@jonathantanmy)
- Josh Steadmon (@steadmon)
- maan2003 (@maan2003)
- Martin von Zweigbergk (@martinvonz)
- Matthew Davidson (@KingMob)
- Philip Metzger (@PhilipMetzger)
- Philipp Albrecht (@pylbrecht)
- Roman Timushev (@rtimush)
- Samuel Tardieu (@samueltardieu)
- Scott Taylor (@scott2000)
- Stephan Hügel (@urschrei)
- Vincent Ging Ho Yim (@cenviity)
- Yuya Nishihara (@yuja)