Skip to content

v0.3.5

Compare
Choose a tag to compare
@arxanas arxanas released this 12 Sep 02:37

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

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

Release highlights

  • git move is ready for general use. Try it out as a lightning-fast replacement for git rebase:
    • git move -s <commit>: move commit and its descendants onto the current commit.
    • git move -d main: rebase the current commit stack on top of main.
    • git move -b <commit1> -d <commit2>: move the stack containing commit1 onto commit2.
    • It doesn't yet replace git rebase -i. Stay tuned for a future release.
    • It can rebase merge commits, similar to git rebase --rebase-merges. If this is part of your workflow, tell me about it in the linked discussion for this release.
  • git restack now tries to rebase in-memory before falling back to an on-disk rebase. This should speed it up noticeably in most cases.
  • Performance of git smartlog has been improved on large repositories by switching to the Eden SCM's directed acyclic graph implementation. You can expect further performance improvements as I port more of the code to use Eden. Thanks to @quark-zju for answering my questions to help me integrate it.

Changelog

Added

  • Merge commits can be rebased by git move --on-disk. This uses the same system as git rebase --rebase-merges.

Changed

  • (#63) The UI for git undo has been changed in various ways. Thanks to @chapati23 for their feedback. You can leave your own feedback here: https://github.com/arxanas/git-branchless/discussions
  • Merge-base calculation is now performed using EdenSCM's directed acyclic graph crate (esl01-dag), which significantly improves performance on large repositories.
  • Subprocess command output is now dimmed and printed above a progress meter, to make it easier to visually filter out important git-branchless status messages from unimportant git machinery output.
  • git move tries to avoid issuing a superfluous git checkout operation if you're already at the target commit/branch.
  • git restack uses in-memory rebases by default.

Fixed

  • git restack warns if a sub-command fails (e.g. if git rebase fails with merge conflicts that need to be resolved).
  • (#57) git undo shows an informative link when dealing with empty events, rather than warning about a bug. Thanks to @waych for reporting.
  • Flickering in git undo's rendering has been reduced.
  • Commits made via git merge are now recorded in the event log.
  • Long progress messages are now truncated on narrow screens.
  • In-memory rebases on large repositories are now up to 500x faster.
  • git smartlog no longer crashes after you've just run git checkout --orphan <branch>.
  • In-memory diffs on large repositories (used for commit deduplication) are now up to 100x faster.
  • Invocations of git-branchless commands which called subprocesses and then exited quickly no longer fail to print the subprocess output.