Release v0.44.0 · jj-vcs/jj · GitHub
//releases/show" data-turbo-transient="true" />
Skip to content
Type / to search
Sign in<br>Sign upAppearance settings
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
Uh oh!
There was an error while loading. Please reload this page.
jj-vcs
jj
Public
Notifications<br>You must be signed in to change notification settings
Fork<br>1.2k
Star<br>30.8k
v0.44.0
Latest
Latest
Compare
Choose a tag to compare
Sorry, something went wrong.
Filter
Loading
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
No results found
View all tags
martinvonz
released this
06 Aug 01:42
v0.44.0
af45d57
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 fetching and pushing tags has now been stabilized. Tags can be
tracked or untracked just like bookmarks. Tracked tags are pushed by default.
Breaking changes
jj git fetch now fetches tags the same way it fetches bookmarks. Tags are
fetched as @, and these remote tags are automatically tracked
by local tags of the same name. Running jj git fetch in an existing
repository will re-fetch all tags to initialize the tracking state.
Git's tagOpt is no longer respected. To disable tag fetching, set
remotes..fetch-tags = '~*' in the jj configuration.
jj git clone --fetch-tags=all|none|included is removed in favor of
--tag=PATTERN.
jj git push --all now pushes all tags in addition to bookmarks.
The WorkspaceRef.root() and RepoPath.absolute() template functions now
return Option and FsPath respectively, instead of String. The
path keyword in jj config list templates now returns Option.
jj file search now prints every matched line prefixed by the file path,
instead of only the file paths of files containing a match. Use
--name-only for the previous behavior.
#9399
Passing an argument more than once is no longer an error. The last occurrence
wins, so jj --no-pager --no-pager version and jj log -n 5 -n 10 now work,
and an argument baked into an alias or a wrapper can be given explicitly as
well. Arguments that can be specified multiple times, such as --config and
jj log -r, are unaffected and still collect all of their values.
#8101
#9859
Deprecations
None
New features
New merge_point() revset function which (similar to fork_point) finds the
point where multiple branches merge.
jj workspace list now shows workspace roots by default. The output can be
customized with templates.workspace_list or -T, and WorkspaceRef.root()
returns an optional FsPath value.
#9713,
#9826
New try(expr, fallback...) template function to suppress runtime errors.
jj run now processes revisions from oldest to newest by default. The start
order is guaranteed: each revision begins execution only after the previous
one has started, even with --jobs higher than 1.
jj run gained a --passthrough flag that connects the subprocess's
stdout/stderr directly to the terminal instead of capturing output.
jj run gained a --ignore-changes flag to avoid editing any revisions even
if the command modifies the working copy.
jj run gained a --ignore-errors flag to continue running against the
remaining revisions even if the command exits with a nonzero exit code.
jj file search now supports -n/--line-number to prefix each match with
its 1-based line number within the file.
jj git push gained a --allow-conflicts flag to allow pushing commits
containing conflicts.
New jj tag track/untrack commands to associate local tags with remotes.
Note that fetched tags are tracked by default.
Added builtin_log() revset alias for the built-in default jj log revset.
revsets.log now defaults to builtin_log(), so custom log revsets can
reuse the built-in default instead of copying its full expression.
Added config option diff.stat.max-bar-width for use with --stat to limit
the ++-- bar width. In the templating language, diff.stat() can optionally
take a second (positional or named) argument max_bar_width for an equivalent
effect.
jj absorb now supports --interactive/-i/--tool to let you
interactively choose which hunks from the source to consider for absorption.
This is useful when you only want to absorb part of a commit without first
splitting it. Any hunks that are not selected or cannot be absorbed remain in
the source commit.
Fixed bugs
Recursive alias definitions are detected more precisely. jj can now expand
aliases that are simply repeated. For example, with the alias jj = [], the
command jj jj jj will resolve to jj. Aliases can also fall back to the
default command. For example, with the alias i = ["--ignore-working-copy"],
jj i will resolve to jj...