Skip to content

Releases: arxanas/git-branchless

v0.11.1

21 May 23:25

Choose a tag to compare

To install or update git-branchless, run the following:

$ cargo install --locked git-branchless
$ git branchless init  # in your repository

Release highlights

None. This is a fixup release that includes no new features or changes in behavior.

Changed

  • (#1672): scm-bisect has been updated (was missed in v0.11.0)

Full Changelog: v0.11.0...v0.11.1

If you're interested in contributing, check out the Developer Guide in the Wiki, or post in the Discussions or Discord server to ask any questions.

v0.11.0

21 May 14:46

Choose a tag to compare

To install or update git-branchless, run the following:

$ cargo install --locked git-branchless
$ git branchless init  # in your repository

Release highlights

This release includes a number of new features and changes; including:

  • Rust v1.86 or later is required to build.
  • A new git split command was introduced.
  • Revsets gained a new ! operator, as well some performance improvements.
  • record and amend can now detect and add new, untracked files.
  • record gained several new options, and a breaking change to another; see below.
  • smartlog received rendering updates, a new setting, and a deprecation; see below.

For full details on the numerous other features, changes and fixes, see below.

Additionally, this is the first release managed by @claytonrcarter. If something seems amiss or is not packaged correctly, please mention it in discussion, or open an issue.

Added

  • (#1461): added ! revset postfix operator as shortcut for "only child"
  • (#1464): created git split command to extract changes from a commit
  • (#1603): added git move --dry-run to test in-memory rebases
  • (#1604): git record and git amend can now automatically detect and begin tracking new files (optional, disabled by default)
  • (#1612): added git record --new to create new, empty commits
  • (#1631): the --reparent flag, previously only available to git amend, is now available to git move, git restack, git split, git sync and git test
  • (#1632): added git record --fixup option, to create a fixup commit (similar to reword --fixup)

Changed

  • (#1270): git smartlog now renders with curved corners
  • (#1271): git smartlog renders commit nodes more consistently with other nodes
  • (#1315): git smartlog now reads the branchless.smartlog.reverse config setting (the --reverse option has been deprecated)
  • (#1462) BREAKING: git record will use a default commit message with --stash (instead of prompting for one)
  • (#1463): git switch now accepts a revset whose sole head will be checked out, and correctly treats - to mean last checked out commit or branch
  • (#1492): scm-record upgraded to v0.5.0.
  • (#1591): improved performance of some revset expressions
  • (#1593) BREAKING: The minimum supported Rust version (MSRV) is now 1.82. See #1638 below.
  • (#1638) BREAKING: The minimum supported Rust version (MSRV) is now 1.86, and the rust edition is now 2024.
  • (#1661): add nix devshell (and other nix updates and fixes)

Fixed

  • (#1439): fix panic with custom git status configuration
  • (#1611): fix behavior of git record --stash on a detached HEAD
  • (#1618): fix behavior of various commands when operating on branches that have the same name as files in the current directory
  • (#1647): correctly describe behavior of when check out target is omitted to git switch
  • (#1651): fix panic when running git-brancless commands in bare repos
  • (#1659): fix snapshotting for submodules and symlinks ending in a /

Contributors

Thanks to everyone who made this release happen! In particular, we'd like to thank our new contributors:

If you're interested in contributing, check out the Developer Guide in the Wiki, or post in the Discussions or Discord server to ask any questions.

Full Changelog: v0.10.0...v0.11.0

v0.10.0

14 Oct 19:51

Choose a tag to compare

To install or update git-branchless, run the following:

$ cargo install --locked git-branchless
$ git branchless init  # in your repository

Release highlights

This is primarily a bugfix release:

  • Supports Git v2.46's reference-transaction updated format (thanks to @jblebrun).
  • Supports Git's index format v4 (thanks to @samueltardieu).
  • Fixes to the interactive commit selector (see scm-record v0.4.0).

Changelog

Added

  • (#1355): git submit now supports the --jobs argument for parallelism.

Changed

Fixed

  • (#1322): Fixed the processing of symbolic refs in reference-transaction lines (since Git v2.46+).
  • (#1353): git submit with the Phabricator forge now ignores untracked working copy changes.
  • (#1363): git-branchless now supports index version 4 (via libgit2 upgrade).
  • (#1393): Branches with multivars in their configuration can now be deleted (via libgit2 upgrade).

Contributors

Thanks to everyone who made this release happen!

If you're interested in contributing, check out the Developer Guide in the Wiki, or post in the Discussions or Discord server to ask any questions.

v0.9.0

27 May 00:19

Choose a tag to compare

To install or update git-branchless, run the following:

$ cargo install --locked git-branchless
$ git branchless init  # in your repository

Release highlights

  • The Apache and MIT license files are now distributed with all git-branchless sub-crates as required.
  • Rust v1.74 or later is required to build.
  • There are breaking changes to git hide and git sync; see below.
  • Broken support for native Windows/Powershell due to bad hook invocations was probably fixed.
    • If this was affecting you, please comment on #370 to confirm or refute.
  • New merges() and branches() revset functions were introduced.

Changelog

See also the release notes for scm-record v0.3.0.

Added

  • (#1129) Added a --dry-run option to git submit to report what would be submitted without actually doing so.
  • (#1130) Added merges() revset function.
  • (#1130) The branches() revset function now accepts an optional text pattern argument to limit which branches are matched.
  • (#1150) The git record command now accepts -s/--stash to return to the previous commit immediately after committing.
  • (#1167) The commit message for a new commit can now be written/edited during git record --interactive.
  • (#1169) git record now accepts multiple --message arguments.
  • (#1184) An initial Github forge was implemented as git submit --forge github, but it's too buggy for general use.
  • (#1241) git smartlog now accepts --exact to skip rendering HEAD and the main branch.
  • (#1244) git submit now accepts multiple arguments/revsets.

Changed

  • BREAKING (#1128) Arguments/revsets passed to git sync are now resolved to their respective stacks.
    • This allows git sync my-branch to work as expected, instead of needing to use git sync 'stack(my-branch)'. The behavior of git sync when called without arguments is not affected by this change. If you rely on the previous behavior, please use git move -x <commit(s)/revset> -d 'main()' instead.
  • BREAKING (#1152) Previously, git hide would not delete branches pointing to the hidden commits unless -D/--delete-branches was passed. Now, deleting branches is the default behavior. Pass --no-delete-branches to restore the old behavior.
  • BREAKING (#1292): The minimum supported Rust version (MSRV) is now 1.74.
  • (#1204) The default instructions for git reword are now wrapped to 72 characters.
  • (#1230) The icon for omitted commits in the smartlog was changed from to .

Fixed

  • (#1071) The Apache and MIT licenses are now distributed with each constituent crate, not just the top-level git-branchless crate.
  • (#1072) The current branch is no longer detached during git amend when the current commit has descendants.
  • (#1073) Merge commits can now be amended with git amend.
  • (#1095) The event log is now shared between all worktrees. Before, commits that were made in one worktree wouldn't be visible in other worktrees, etc.
  • (#1095) git submit now runs in worktree that you invoked it in.
  • (#1095) git submit --forge phabricator no longer records spurious commits when arc diffing.
  • (#1127) Improved support for files with spaces in their name.
  • (#1267) The correct "path" variable is now used on Windows, which fixes some cases of git-branchless failing on native Windows.

Contributors

Thanks to everyone who made this release happen!

If you're interested in contributing, check out the Developer Guide in the Wiki, or post in the Discussions or Discord server to ask any questions.

v0.8.0

31 Aug 16:32

Choose a tag to compare

To install or update git-branchless, run the following:

$ cargo install --locked git-branchless
$ git branchless init  # in your repository

If you haven't already taken the user survey, please consider doing so!

Release highlights

  • git-branchless is now dual-licensed as MIT/Apache 2.0.
  • Rust v1.67 or later is required to build.
  • The partial commit interface (git record -i) now uses a new, more performant interface.
  • git-branchless supports repositories managed with repo (e.g. Chromium)

Changelog

Added

  • (#545) EXPERIMENTAL: Added a --fixup option to git move to squash moved commits into the destination
  • (#830) Added git branchless install-man-pages command. This may be useful for package maintainers or those who install git-branchless from source.
  • (#840) git-branchless supports Phabricator as a backend forge for git submit.
  • (#845) Added the branchless.smartlog.defaultRevset configuration variable.
  • (#910) Added support for repositories managed by the repo tool.
  • (#1009) Added git branchless difftool subcommand.

Changed

  • BREAKING (#841): git-branchless is now dual-licensed as MIT/Apache 2.0.
  • BREAKING: (#1024) Rust v1.67 or later is required to build.
  • (#825) git submit only fetches the necessary branches, rather than all branches, before pushing.
  • (#826) Switch to scm-record crate to provide the partial commit interface.
  • (#914) The default revset for git restack is now draft().

Fixed

  • (#866) New commits created during git rebase are no longer kept if the rebase is aborted.
  • (#866) git test no longer clobbers working copy changes.
  • (#876) After git amend, detached branches previously pointing to the amended commit are now updated.
  • (#915) Fixed certain situations of rebasing merge commits when all parents have also been rebased.
  • (#920) Running git sync when the main branch is checked out no longer leaves a dirty index.
  • (#938) Somehow fixed mysterious hang.

New Contributors

Thanks to the following first-time contributors!

If you're interested in contributing, check out the Developer Guide in the Wiki, or post in the Discussions or Discord server to ask any questions.

v0.7.1

17 Mar 17:23

Choose a tag to compare

To install or update git-branchless, run the following:

$ cargo install --locked git-branchless
$ git branchless init  # in your repository

If you haven't already taken the user survey, please consider doing so!

Release highlights

This release includes some small changes to help package managers.

Changelog

Added

  • (#830) Added git branchless install-man-pages command to generate and install man-pages. This is primarily intended for those packaging git-branchless for package management systems.

Fixed

  • (#844) Fixed build for NetBSD.

v0.7.0

02 Mar 04:27

Choose a tag to compare

To install or update git-branchless, run the following:

$ cargo install --locked git-branchless
$ git branchless init  # in your repository

If you haven't already taken the user survey, please consider doing so!

Release highlights

Changelog

Added

  • (#646) git amend now supports a --reparent option to adjust the contents of a commit while keeping the children commits exactly the same.
  • (#686) git branchless init will now populate the internal commit graph structure, rather than waiting for the first invocation of a git branchless subcommand.
  • (#725) Added siblings() revset function to determine the siblings of a given commit.
  • (#725) Added an -I/--insert option to git record to insert the new commit before all of the current commit's children.
  • (#763) Added a -d/--detach option to git branchless switch to switch to a commit without checking out any associated branches (as might happen due to the branchless.navigation.autoSwitchBranches configuration variable), or to switch to a branch without checking it out.
  • (#766) Added a git test fix subcommand to apply formatters/linters/etc. to a set of commits.
  • (#777) Added the --search option to git test run to search a set of commits using linear or binary search for the first commit(s) which cause the tests to fail.
  • (#777) git test run now aborts the overall test run when a test returns exit code 127.
  • (#777) git test run now sets the BRANCHLESS_TEST_COMMIT and BRANCHLESS_TEST_COMMAND environment variables when running the test command.
  • (#785) Added tests.passed(), tests.failed(), and tests.fixable() revset functions, whose results are populated by git test.
  • (#790) Added the --reverse option to git smartlog.

Changed

  • (#730) BREAKING: The default revset for git reword is now stack() | @ instead of @, to simultaneously reword all commits in the current stack.
  • (#763) BREAKING: git branchless switch no longer implicitly opens the interactive commit selector when no target is provided. You must explicitly pass -i/--interactive to do so.
  • (#801) BREAKING: The parameter to git record has been renamed from -b/--branch to -c/--create.
  • (#685) git submit now colorizes the names of the affected branches.
  • (#763) Running git branchless switch with no arguments will switch to the branch associate with the current commit, if there is exactly one such branch and the branchless.navigation.autoSwitchBranches configuration variable is set to true.
  • (#791) The name for the temporary file created by git reword is now of the form COMMIT_EDITMSG-*.txt, which your editor can use to detect it as a Git commit message file.
  • (#811) The styling for git test progress and output has been changed.

Fixed

  • (#646) Adjusted messaging during merge conflicts with git move --in-memory to be more accurate.
  • (#647) git test run now recovers from previously-failed tests instead of failing indefinitely in future runs.
  • (#670) git submit no longer force-pushes the current branch in the circumstance that all branches are currently up-to-date.
  • (#688) git amend now respects the --merge option.
  • (#722) git reword now supports invoking editors with spaces in their names.
  • (#724) git branchless init now installs a post-applypatch hook, for users of git am.
  • (#742) git branchless init now respects a leading ~ in the core.hooksPath configuration variable.
  • (#743) git sync, etc. now correctly clean up remote branch information for branches which have been merged upstream. Previously, the remote branch information would be left behind, which would cause future branches with the same names to incorrectly become associated with the old remote branch.
  • (#764) git sync will no longer attempt to resolve merge conflicts unless you pass --merge. Previously, this could happen when attempting to sync merge commits.

New Contributors

Thanks to the following first-time contributors!

If you're interested in contributing, check out the Developer Guide in the Wiki, or post in the Discussions or Discord server to ask any questions.

v0.7.0-rc.1

19 Feb 08:40

Choose a tag to compare

v0.7.0-rc.1 Pre-release
Pre-release

See the changelog for the details, or wait for the release for the full release notes. Release candidate points of note:

  • This release splits the codebase into ~20 crates, so let me know if there are any installation problems.
  • The invocation of Git hooks has been changed, so let me know if there are unexpected failures.

v0.6.0

14 Nov 21:15

Choose a tag to compare

To install or update git-branchless, run the following:

$ cargo install --locked git-branchless
$ git branchless init  # in your repository

If you were using a remote main branch, you will have to switch to a local main branch, as remote main branches are no longer supported; see below.

If you haven't already taken the user survey, please consider doing so!

Release highlights

  • Changes to branching:
    • We now use "switch" instead of "checkout" as the terminology, and the alias git sw is installed by default instead of git co. Thanks to @mlcui-google for fixing a bug in this!
    • Remote main branches are no longer supported.
    • Branches will be automatically checked out when switched to. Thanks to @bcspragu for implementing this!
  • More customizable smartlogs:
    • You can now render different views of the smartlog, possibly omitting commits and branches at your discretion. Thanks to @claytonrcarter for implementing this!
    • Merge commits are also rendered slightly better.
  • git test:
    • Lets you run a given command or check on each commit in your stack.
    • You can leave feedback about the UI or workflow in the discussion board or Discord chat.
    • Documentation at Command: git test.

Changelog

Added

  • (#576) EXPERIMENTAL: Created git test command to run a command on each commit in your stack.
  • (#589, #593) git sync --pull rebases the local main branch on top of the remote main branch.
  • (#619) git smartlog now renders revsets with non-contiguous commits.
  • (#638) git smartlog now deduplicates merge commits which appear in the smartlog.

Changed

  • (#526) BREAKING: When checking out a commit with a single branch attached to it, that branch will also be checked out.
  • (#589) BREAKING: Remote main branches are no longer supported. To upgrade you'll need to create a local main branch which tracks the remote main branch. You can use git sync to keep it up-to-date.
  • (#571) Added current(<revset>) revset function to determine the latest versions of a set of rewritten commits.
  • (#582) Added main(), public() revset functions.
  • (#593, #608) git sync produces more descriptive output.

Fixed

  • (#588) git branchless init now works when invoked in a worktree.
  • (#589) git reword --force-rewrite no longer moves remote-tracking branches.
  • (#589) git smartlog no longer uses 100% CPU in certain cases with remote main branches (because remote main branches are no longer supported).

New Contributors

Thanks to the following first-time contributors!

If you're interested in contributing, check out the Developer Guide in the Wiki, or post in the Discussions or Discord server to ask any questions.

v0.5.1

04 Oct 00:46

Choose a tag to compare

This is a patch release to fix an outdated Cargo.lock file, as per #581. You don't need to update unless you're having issues building from source.

See the v0.5.0 release notes.