v0.24.0

jj-vcs/jjv0.24.0Dec 4, 2024by martinvonz

AI Summary

Introduces the `jj absorb` command for automatically squashing changes and removes deprecated commands like `jj move`, `jj checkout`, and `jj merge`.

Key Highlights

  • New `jj absorb` command automatically squashes changes into ancestor commits.
  • Experimental dynamic shell completions have been added.
  • New `jj duplicate` command accepts `--destination` and position options.
  • Deprecated commands move, checkout, and merge have been removed.

Breaking Changes

  • `jj move`, `jj checkout`, and `jj merge` have been removed.
  • `jj git push` no longer pushes new bookmarks by default.

New Features

  • Logical operators (`==`, `!=`) for Boolean, Integer, and String types.
  • New `jj util exec` command for arbitrary aliases.
  • Preview of improved shell completions with context-dependent values.
  • New `fork_point()` revset function.
  • New `ui.conflict-marker-style` config option.
  • New `merge-tools` config options for exit codes and styles.

Full Release Notes

### About

jj is a Git-compatible version control system that is both simple and powerful. See the [installation instructions](https://martinvonz.github.io/jj/v0.24.0/install-and-setup/) to get started.

### Release highlights

* New [`jj absorb`](https://martinvonz.github.io/jj/latest/cli-reference/#jj-absorb) command automatically squashes changes from the current commit into relevant ancestor commits.

* Experimental dynamic shell completions have been added; see [the docs](https://martinvonz.github.io/jj/latest/install-and-setup/#command-line-completion) for configuration.

* [`jj duplicate`](https://martinvonz.github.io/jj/latest/cli-reference/#jj-duplicate) now accepts `--destination`/`--insert-before`/`--insert-after`.

* Some deprecated commands have been removed (`jj move`, `jj checkout`, `jj merge`).

### Breaking changes

* `jj move` has been removed. It was deprecated in 0.16.0.

* `jj checkout` and the built-in alias `jj co` have been removed.
  It was deprecated in 0.14.0.

* `jj merge` has been removed. It was deprecated in 0.14.0.

* `jj git push` no longer pushes new bookmarks by default. Use `--allow-new` to
  bypass this restriction.

* Lines prefixed with "JJ:" in commit descriptions and in sparse patterns (from
  `jj sparse edit`) are now stripped even if they are not immediately followed
  by a space. [#5004](https://github.com/martinvonz/jj/issues/5004)

### Deprecations

### New features

* Templates now support the `==` and `!=` logical operators for `Boolean`,
  `Integer`, and `String` types.

* New command `jj absorb` that moves changes to stack of mutable revisions.

* New command `jj util exec` that can be used for arbitrary aliases.

* `jj rebase -b` can now be used with the `--insert-after` and `--insert-before`
  options, like `jj rebase -r` and `jj rebase -s`.

* A preview of improved shell completions was added. Please refer to the
  [documentation](https://martinvonz.github.io/jj/latest/install-and-setup/#command-line-completion)
  to activate them. They additionally complete context-dependent, dynamic values
  like bookmarks, aliases, revisions, operations and files.

* Added the config setting `snapshot.auto-update-stale` for automatically
  running `jj workspace update-stale` when applicable.

* `jj duplicate` now accepts `--destination`, `--insert-after` and
  `--insert-before` options to customize the location of the duplicated
  revisions.

* `jj log` now displays the working-copy branch first.

* New `fork_point()` revset function can be used to obtain the fork point
  of multiple commits.

* The `tags()` revset function now takes an optional `pattern` argument,
  mirroring that of `bookmarks()`.

* Several commands now support `-f/-t` shorthands for `--from/--to`:
  - `diff`
  - `diffedit`
  - `interdiff`
  - `op diff`
  - `restore`

* New `ui.conflict-marker-style` config option to change how conflicts are
  materialized in the working copy. The default option ("diff") renders
  conflicts as a snapshot with a list of diffs to apply to the snapshot.
  The new "snapshot" option renders conflicts as a series of snapshots, showing
  each side and base of the conflict. The new "git" option replicates Git's
  "diff3" conflict style, meaning it is more likely to work with external tools,
  but it doesn't support conflicts with more than 2 sides.

* New `merge-tools.<TOOL>.conflict-marker-style` config option to override the
  conflict marker style used for a specific merge tool.

* New `merge-tools.<TOOL>.merge-conflict-exit-codes` config option to allow a
  merge tool to exit with a non-zero code to indicate that not all conflicts
  were resolved.

* `jj simplify-parents` now supports configuring the default revset when no
   `--source` or `--revisions` arguments are provided with the
   `revsets.simplify-parents` config.

### Fixed bugs

* `jj config unset <TABLE-NAME>` no longer removes a table (such as `[ui]`.)


### Contributors

Thanks to the people who made this release happen!

* Austin Seipp (@thoughtpolice)
* Benjamin Tan (@bnjmnt4n)
* Daniel Ploch (@torquestomp)
* Emily (@neongreen)
* Essien Ita Essien (@essiene)
* Herman J. Radtke III (@hjr3)
* Ilya Grigoriev (@ilyagr)
* Joaquín Triñanes (@JoaquinTrinanes)
* Lars Francke (@lfrancke)
* Luke Randall (@lukerandall)
* Martin von Zweigbergk (@martinvonz)
* Nathanael Huffman (@nathanaelhuffman)
* Philip Metzger (@PhilipMetzger)
* Remo Senekowitsch (@senekor)
* Robin Stocker (@robinst)
* Scott Taylor (@scott2000)
* Shane Sveller (@shanesveller)
* Tim Janik (@tim-janik)
* Yuya Nishihara (@yuja)