Releases: arxanas/git-branchless
v0.10.0
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!
- @arxanas
- @jblebrun made their first contribution in #1322
- @niklaskorz made their first contribution in #1400
- @samueltardieu
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
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
andgit 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()
andbranches()
revset functions were introduced.
Changelog
See also the release notes for scm-record
v0.3.0.
Added
- (#1129) Added a
--dry-run
option togit 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 renderingHEAD
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 usegit sync 'stack(my-branch)'
. The behavior ofgit sync
when called without arguments is not affected by this change. If you rely on the previous behavior, please usegit move -x <commit(s)/revset> -d 'main()'
instead.
- This allows
- 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 whenarc diff
ing. - (#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!
- @adzenith made their first contribution in #1060
- @arxanas
- @avamsi made their first contribution in #1050
- @bryango made their first contribution in #1246
- @c00t made their first contribution in #1267
- @claytonrcarter
- @jirutka made their first contribution in #1285
- @martinvonz
- @mlcui-corp
- @snan made their first contribution in #1126
- @willruggiano made their first contribution in #1254
- @YakoYakoYokuYoku made their first contribution in #1150
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
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.- You can also access the interface directly via
git branchless difftool
.
- You can also access the interface directly via
- git-branchless supports repositories managed with
repo
(e.g. Chromium)
Changelog
Added
- (#545) EXPERIMENTAL: Added a
--fixup
option togit 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 nowdraft()
.
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!
- @melko made their first contribution in #829
- @jakejx made their first contribution in #825
- @alerque made their first contribution in #857
- @thoughtpolice made their first contribution in #978
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
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
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
- New features for
git test
to help working with patch stacks. See the postgit test fix
,git test run --search
for details and demos.git test
now implements afix
subcommand to run formatters/linters/etc. on each commit and apply their changes.git test run
now implements linear, reverse-linear, and binary search.
- There are breaking changes to
git reword
,git switch
, andgit record
; see below.
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 agit branchless
subcommand. - (#725) Added
siblings()
revset function to determine the siblings of a given commit. - (#725) Added an
-I
/--insert
option togit record
to insert the new commit before all of the current commit's children. - (#763) Added a
-d
/--detach
option togit branchless switch
to switch to a commit without checking out any associated branches (as might happen due to thebranchless.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 togit 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 code127
. - (#777)
git test run
now sets theBRANCHLESS_TEST_COMMIT
andBRANCHLESS_TEST_COMMAND
environment variables when running the test command. - (#785) Added
tests.passed()
,tests.failed()
, andtests.fixable()
revset functions, whose results are populated bygit test
. - (#790) Added the
--reverse
option togit smartlog
.
Changed
- (#730) BREAKING: The default revset for
git reword
is nowstack() | @
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 thebranchless.navigation.autoSwitchBranches
configuration variable is set totrue
. - (#791) The name for the temporary file created by
git reword
is now of the formCOMMIT_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 apost-applypatch
hook, for users ofgit am
. - (#742)
git branchless init
now respects a leading~
in thecore.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!
- @samueltardieu made their first contribution in #742
- @wabain made their first contribution in #791
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
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
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 ofgit 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!
- We now use "switch" instead of "checkout" as the terminology, and the alias
- 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!
- @bcspragu made their first contribution in #526
- @mlcui-google made their first contribution in #626
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
v0.5.0
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 intofixup!
commits (for use withgit 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
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.
- (#400) Added
- Added
--yes
option togit 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.
- Created the
- (#399) Added
--delete-branches
option togit 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
tofalse
.
- Working copy snapshots are taken by default. Disable by setting
- 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, usegit 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 runninggit undo
. Previously, it showed the smartlog as if you were still at theHEAD
location before thegit undo
. - (#387)
git reword
now reads from$GIT_EDITOR
, etc. via thegit var
command. - (#418) When running
git smartlog
or similar, any commits which would show up are now kept live for garbage-collection purposes, even ifgit-branchless
didn't observe them being committed.