Releases: arxanas/git-branchless
v0.11.1
To install or update git-branchless, run the following:
$ cargo install --locked git-branchless
$ git branchless init # in your repositoryRelease highlights
None. This is a fixup release that includes no new features or changes in behavior.
Changed
- (#1672):
scm-bisecthas 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
To install or update git-branchless, run the following:
$ cargo install --locked git-branchless
$ git branchless init # in your repositoryRelease highlights
This release includes a number of new features and changes; including:
- Rust v1.86 or later is required to build.
- A new
git splitcommand was introduced. - Revsets gained a new
!operator, as well some performance improvements. recordandamendcan now detect and add new, untracked files.recordgained several new options, and a breaking change to another; see below.smartlogreceived 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 splitcommand to extract changes from a commit - (#1603): added
git move --dry-runto test in-memory rebases - (#1604):
git recordandgit amendcan now automatically detect and begin tracking new files (optional, disabled by default) - (#1612): added
git record --newto create new, empty commits - (#1631): the
--reparentflag, previously only available togit amend, is now available togit move,git restack,git split,git syncandgit test - (#1632): added
git record --fixupoption, to create a fixup commit (similar toreword --fixup)
Changed
- (#1270):
git smartlognow renders with curved corners - (#1271):
git smartlogrenders commit nodes more consistently with other nodes - (#1315):
git smartlognow reads thebranchless.smartlog.reverseconfig setting (the--reverseoption has been deprecated) - (#1462) BREAKING:
git recordwill use a default commit message with--stash(instead of prompting for one) - (#1463):
git switchnow accepts a revset whose sole head will be checked out, and correctly treats-to mean last checked out commit or branch - (#1492):
scm-recordupgraded 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 --stashon 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:
- @TrueDoctor made their first contribution in #1439
- @raylu made their first contribution in #1518
- @xuanduc987 made their first contribution in #1271
- @chf2117 made their first contribution in #1419
- @cjsoft made their first contribution in #1618
- @feosuna1 made their first contribution in #1651
- @e-q made their first contribution in #1315
- @bitbloxhub made their first contribution in #1660
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
To install or update git-branchless, run the following:
$ cargo install --locked git-branchless
$ git branchless init # in your repositoryRelease 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-recordv0.4.0).
Changelog
Added
- (#1355):
git submitnow supports the--jobsargument for parallelism.
Changed
Fixed
- (#1322): Fixed the processing of symbolic refs in reference-transaction lines (since Git v2.46+).
- (#1353):
git submitwith the Phabricator forge now ignores untracked working copy changes. - (#1363): git-branchless now supports index version 4 (via
libgit2upgrade). - (#1393): Branches with multivars in their configuration can now be deleted (via
libgit2upgrade).
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-branchlesssub-crates as required. - Rust v1.74 or later is required to build.
- There are breaking changes to
git hideandgit 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-runoption togit submitto 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 recordcommand now accepts-s/--stashto 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 recordnow accepts multiple--messagearguments. - (#1184) An initial Github forge was implemented as
git submit --forge github, but it's too buggy for general use. - (#1241)
git smartlognow accepts--exactto skip renderingHEADand the main branch. - (#1244)
git submitnow accepts multiple arguments/revsets.
Changed
- BREAKING (#1128) Arguments/revsets passed to
git syncare now resolved to their respective stacks.- This allows
git sync my-branchto work as expected, instead of needing to usegit sync 'stack(my-branch)'. The behavior ofgit syncwhen 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 hidewould not delete branches pointing to the hidden commits unless-D/--delete-brancheswas passed. Now, deleting branches is the default behavior. Pass--no-delete-branchesto restore the old behavior. - BREAKING (#1292): The minimum supported Rust version (MSRV) is now 1.74.
- (#1204) The default instructions for
git rewordare 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-branchlesscrate. - (#1072) The current branch is no longer detached during
git amendwhen 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 submitnow runs in worktree that you invoked it in. - (#1095)
git submit --forge phabricatorno longer records spurious commits whenarc 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-branchlessfailing 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
--fixupoption togit moveto squash moved commits into the destination - (#830) Added
git branchless install-man-pagescommand. 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.defaultRevsetconfiguration variable. - (#910) Added support for repositories managed by the
repotool. - (#1009) Added
git branchless difftoolsubcommand.
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 submitonly fetches the necessary branches, rather than all branches, before pushing. - (#826) Switch to
scm-recordcrate to provide the partial commit interface. - (#914) The default revset for
git restackis nowdraft().
Fixed
- (#866) New commits created during
git rebaseare no longer kept if the rebase is aborted. - (#866)
git testno 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 syncwhen 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-pagescommand 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 testto help working with patch stacks. See the postgit test fix,git test run --searchfor details and demos.git testnow implements afixsubcommand to run formatters/linters/etc. on each commit and apply their changes.git test runnow implements linear, reverse-linear, and binary search.
- There are breaking changes to
git reword,git switch, andgit record; see below.
Changelog
Added
- (#646)
git amendnow supports a--reparentoption to adjust the contents of a commit while keeping the children commits exactly the same. - (#686)
git branchless initwill now populate the internal commit graph structure, rather than waiting for the first invocation of agit branchlesssubcommand. - (#725) Added
siblings()revset function to determine the siblings of a given commit. - (#725) Added an
-I/--insertoption togit recordto insert the new commit before all of the current commit's children. - (#763) Added a
-d/--detachoption togit branchless switchto switch to a commit without checking out any associated branches (as might happen due to thebranchless.navigation.autoSwitchBranchesconfiguration variable), or to switch to a branch without checking it out. - (#766) Added a
git test fixsubcommand to apply formatters/linters/etc. to a set of commits. - (#777) Added the
--searchoption togit test runto search a set of commits using linear or binary search for the first commit(s) which cause the tests to fail. - (#777)
git test runnow aborts the overall test run when a test returns exit code127. - (#777)
git test runnow sets theBRANCHLESS_TEST_COMMITandBRANCHLESS_TEST_COMMANDenvironment 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
--reverseoption togit smartlog.
Changed
- (#730) BREAKING: The default revset for
git rewordis nowstack() | @instead of@, to simultaneously reword all commits in the current stack. - (#763) BREAKING:
git branchless switchno longer implicitly opens the interactive commit selector when no target is provided. You must explicitly pass-i/--interactiveto do so. - (#801) BREAKING: The parameter to
git recordhas been renamed from-b/--branchto-c/--create. - (#685)
git submitnow colorizes the names of the affected branches. - (#763) Running
git branchless switchwith no arguments will switch to the branch associate with the current commit, if there is exactly one such branch and thebranchless.navigation.autoSwitchBranchesconfiguration variable is set totrue. - (#791) The name for the temporary file created by
git rewordis 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 testprogress and output has been changed.
Fixed
- (#646) Adjusted messaging during merge conflicts with
git move --in-memoryto be more accurate. - (#647)
git test runnow recovers from previously-failed tests instead of failing indefinitely in future runs. - (#670)
git submitno longer force-pushes the current branch in the circumstance that all branches are currently up-to-date. - (#688)
git amendnow respects the--mergeoption. - (#722)
git rewordnow supports invoking editors with spaces in their names. - (#724)
git branchless initnow installs apost-applypatchhook, for users ofgit am. - (#742)
git branchless initnow respects a leading~in thecore.hooksPathconfiguration 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 syncwill 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 swis 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 testcommand to run a command on each commit in your stack. - (#589, #593)
git sync --pullrebases the local main branch on top of the remote main branch. - (#619)
git smartlognow renders revsets with non-contiguous commits. - (#638)
git smartlognow 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 syncto 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 syncproduces more descriptive output.
Fixed
- (#588)
git branchless initnow works when invoked in a worktree. - (#589)
git reword --force-rewriteno longer moves remote-tracking branches. - (#589)
git smartlogno 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.