Skip to content

Releases: arxanas/git-branchless

v0.8.0

31 Aug 16:32
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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.

v0.5.0

29 Sep 02:08
Compare
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 see an error like failed to select a requirement libgit2-sys, then you need to update your version of Rust. See the troubleshooting section.

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

Release highlights

This is primarily a bugfix release for revset-related issues. Thanks to @claytonrcarter and @pokey who fixed several bugs!

  • git reword gained the --fixup flag, and can now reword merge commits.
  • An experimental git submit command was added (discuss).

Changelog

Added

  • (#508) Added exactly(<revset>, n) revset function to allow assertions on the number of commits within a set.
  • (#509) Users can now define custom revset aliases.
  • (#533) git reword can now reword merge commits.
  • (#534) git record now accepts a --detach option to avoid moving the current branch.
  • (#538) git reword now accepts a --fixup option to convert regular commits into fixup! commits (for use with git rebase --autosquash)
  • (#541) EXPERIMENTAL: Created git submit command. Discuss at #564.

Changed

  • (#543) Commands will produce a better error message for certain unsupported sparse checkout configurations.

Fixed

  • (#507) The messages() revset function now ignores trailing newlines in commit messages.
  • (#512) Fixed so that the setting for --color is now respected.
  • (#512) Fixed so that you can pass --color anywhere in the command-line, not just before the subcommand.
  • (#513) Fixed some false positives for hints to run git restack when printing the smartlog.
  • (#518) Fixed the suggested flag in the error message when attempting to rewrite public commits.
  • (#539) Fixed parse errors for certain single-quoted string literals in revset expressions.
  • (#559) Fixed precedence for parentheses in revset expressions.
  • (#569) Fixed the reversed output order of the results of git query.

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.4.0

10 Aug 07:04
Compare
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 see an error like failed to select a requirement libgit2-sys, then you need to update your version of Rust. See the troubleshooting section.

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

Release highlights

πŸŽ‰ This release includes the 1000th commit to git-branchless! πŸŽ‰

There are two exciting features in this release:

  • git move accepts the -x/--exact and -I/--insert flags to move commits much more precisely than previously possible.
    • Huge thanks to @claytonrcarter, who implemented these, which required a lot of tricky code.
  • git-branchless commands which used to accept single commits now accept revset expressions, similar to Mercurial.
    • Revsets are a declarative language which allows specifying commits in a much more flexible manner than is supported by Git.
    • You can use the new git query command as an interface to try out your revset queries.

See Revset recipes for some ideas on how to use git move and revsets together or contribute your own.

On a logistical note, we will be incrementing the minor version number by default in future versions of git-branchless. Minor versions will include new features and may include breaking changes (while we are still on version 0.x.y). The patch version number will be used for backward-compatible bug-fixes, as SemVer intended.

Changelog

Added

  • Numerous updates to git branchless move:
    • (#400) Added --insert option to to insert the moved subtree or commits into the commit tree between the destination commit and its children, if any.
    • (#450) Added --exact option to move a specific set of commits elsewhere in the commit tree. They will be removed from their current location and any unmoved children (if any) will be moved to their closest unmoved ancestor. The moved commits will maintain their overall ancestry structure.
    • (#447) --source, --base and --exact options can all be provided multiple times to move multiple subtress, ranges and/or commits to the destination.
  • Added --yes option to git undo to skip confirmation.
  • (#366) Added bulk edit mode to git reword to allow updating multiple, individual commit messages at once.
  • (#398) Added support for revset expressions in most commands.
    • Created the git query command to dump the results of revset queries.
  • (#399) Added --delete-branches option to git hide.
  • (#435) Created the git branchless repair command, which is occasionally useful for cleaning up garbage-collected commits from the smartlog.
  • EXPERIMENTAL: (#382) Working copy snapshots are created before potentially-destructive operations in order to improve the capabilities of git undo.
    • Working copy snapshots are taken by default. Disable by setting branchless.undo.createSnapshots to false.
  • EXPERIMENTAL: (#391) created the git record command, which opens an interactive change selector for committing.

Changed

  • BREAKING: (#422) Rust v1.61 or later is required to build.
  • BREAKING: (#472) git smartlog no longer supports the --only-branches option. Instead, use git smartlog 'branches()'.
  • BREAKING: (#479) git move will abort when trying to move public commits; you now have to pass --force.
  • (#397) When editing only a single commit message with git reword, the marker line is omitted.

Fixed

  • (#342) Commands which automatically show the smartlog after them no longer show it in gray with ASCII glyphs. This reverts the behavior to that of before v0.3.11.
  • (#358) Adjusted the misleading suggestion that was printed when running a git amend invocation which produced merge conflicts.
  • (#359) Fixed the smartlog output when running git undo. Previously, it showed the smartlog as if you were still at the HEAD location before the git undo.
  • (#387) git reword now reads from $GIT_EDITOR, etc. via the git var command.
  • (#418) When running git smartlog or similar, any commits which would show up are now kept live for garbage-collection purposes, even if git-branchless didn't observe them being committed.

v0.3.12

08 Apr 07:48
Compare
Choose a tag to compare

No changes since v0.3.11.

v0.3.11

08 Apr 07:47
Compare
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 is a smoke test for git-branchless having been broken into multiple crates, so please report any unexpected compilation issues on the issue tracker.

git-branchless v0.3.12 was also released, with no additional changes from v0.3.11.

Changelog

Added

  • Added --discard flag to git reword to start with a clean commit message.

Fixed

  • (#326) git restack now restacks certain branch commits which it missed before.