Release highlights
git-branchless
is now licensed under the GPL-2.- Progress indicators are shown during slow operations, which can be helpful when working in large repositories.
- The long-term goal is to significantly speed up those operations by improving on the implementations offered in libgit2.
- When you rebase your work onto the main branch,
git move
will now clean up (delete) branches which point to commits which have been applied upstream. This means you can sync a local commit stack with e.g.git move -b <branch> -d master
, and any already-merged branches will be automatically deleted.- The later goal is to have a
git sync
command which will bring all of your local-branches up to date. - If a branch was deleted in error, you can always get it back with
git undo
.
- The later goal is to have a
Changelog
Added
git move
now supports forcing an in-memory rebase with the--in-memory
flag.- The
reference-transaction
hook prints out which references were updated. git restack
can now accept a list of commit hashes whose descendants should be restacked, rather than restacking every abandoned commit indiscriminately.git move
will skip applying commits which have already been applied upstream, and delete their corresponding branches.- Progress indicators are now displayed when
git-branchless
takes longer than 250ms to complete.
Changed
- BREAKING:
git-branchless
is now licensed under the GPL-2. - More of the Git hooks installed by
git-branchless
display the affected objects, rather than just the number of affected objects. git move
with no--source
or--base
option now defaults to--base HEAD
rather than--source HEAD
.
Fixed
- The output of
git
subcommands is streamed to stdout, rather than accumulated and dumped at the end. - Commits rebased in-memory by
git move
are now marked as reachable by the Git garbage collector, so that they aren't collected prematurely. git-branchless wrap
correctly relays the exit code of its subprocess.- Some restack and move operations incorrectly created branches without the necessary
refs/heads/
prefix, which means they weren't considered local branches by Git. - Some restack and move operations didn't relocate all commits and branches correctly, due to the experimental
git move
backend. The backend has been changed to use a constraint-solving approach rather than a greedy approach to fix this. git move
preserves committer timestamps whenbranchless.restack.preserveTimestamps
is set. The configuration key may change in the future.- If your currently-checked-out commit was rewritten during a
git move
operation, it now checks out the new version of the commit, rather than leaving you on an old, hidden commit. - If your current stack had another stack branching off of it, and
git move --base
was passed a commit that other stack, it would fail with a cyclic dependency error. It now clips off the unique part of the branch and moves it. - If an on-disk rebase would occur (such as the result of
git move
orgit restack
), but you have uncommitted changes in your working copy, the rebase is aborted and a warning is printed, rather than potentially clobbering your changes.