Skip to content

Releases: jesseduffield/lazygit

v0.44.1

18 Sep 10:55
611fabd
Compare
Choose a tag to compare

What's Changed

Enhancements πŸ”₯

  • With stacked branches, create fixup commit at the end of the branch it belongs to by @stefanhaller in #3892
  • Add options for disabling switching to the Files panel after popping or applying a stash by @stefanhaller in #3913

Fixes πŸ”§

  • Fix crash when viewing the divergence of a branch which is up to date with its upstream by @stefanhaller in #3918

Performance improvements πŸ“Š

  • Improve performance with large numbers of untracked or modified files by @parthokunda in #3919

I18n 🌎

New Contributors

Full Changelog: v0.44.0...v0.44.1

v0.44.0

07 Sep 02:26
2d0c7cb
Compare
Choose a tag to compare

What's Changed

Lots of great changes in this release. Thanks to everybody who contributed!

Enhancements πŸ”₯

  • Per-repo config files (and reloading of edited config files) by @stefanhaller in #3787
    • In addition to the global config file you can now create repo-specific config files inΒ <repo>/.git/lazygit.yml. Settings in these files override settings in the global config file. In addition, files calledΒ .lazygit.ymlΒ in any of the parent directories of a repo will also be loaded; this can be useful if you have settings that you want to apply to a group of repositories.
    • We now also automatically apply (most) config changes without the need to restart lazygit
  • Easily view diff across range of commits by @stefanhaller in #3869
    • If you select a range of commits, we now show the diff across the range (inclusive). This makes it easy to see the total changes across a number of commits. Likewise, if you press enter when a range of commits are selected, we will show the changed files for the range.
Screen.Recording.2024-09-07.at.12.29.15.pm.mov
  • Support hyperlinks from pagers by @stefanhaller in #3825
    • If you're using delta as a pager (which I highly recommend trying), you can now click on line numbers to go to that line in your editor by using the following config:
     git:
       paging:
         colorArg: always
         pager: delta --paging=never --line-numbers --hyperlinks --hyperlinks-file-link-format="lazygit-edit://{path}:{line}"
Screen.Recording.2024-09-07.at.12.30.48.pm.mov
  • Switch to Files panel after popping/applying a stash by @stefanhaller in #3888
    • This is a nice quality of life improvement. You generally want to go straight to the files panel after you pop or apply from the stash
  • Ask to auto-stage unstaged files when continuing a rebase after resolving conflicts by @stefanhaller in #3879
    • Another quality of life improvement: often you resolve some conflicts, then make another couple changes, then in lazygit you say to continue and you get an error saying there are unstaged changes. Now instead of showing an error, lazygit asks if you want to stage those changes and continue.
  • Offer autostash option when creating new branch by @brandondong in #3871
    • Another great quality of life improvement
  • Allow using shell aliases in interactive custom commands by @stefanhaller in #3793
  • Switch tabs with panel jump keys by @stefanhaller in #3794
    • If you've already been using the number keys (1-5) for jumping to specific side panels, you'll be pleased to know that you can now also use those keys for jumping to tabs within a side panel. E.g. to go to the reflog panel, you can now press 4 to jump to the commits panel, then 4 again to go to the reflog tab.
  • Rename "Custom Command" to "Shell Command" by @stefanhaller in #3800
    • There are two ways of invoking a 'custom' command in Lazygit: first by pre-defining a command in your config, and second by pressing ':' and typing in the command directly. We referred to both of these as 'custom commands' which was confusing. We now refer to the second approach as invoking a 'shell command'.
  • Improve template placeholders for custom commands by @stefanhaller in #3809
    • Now you can use SelectedCommit to refer to the selected commit regardless of which commits panel you're in (local commits, reflog, etc)
    • Likewise, you can use SelectedPath whether you're in the files panel or the commit-files panel.
  • feat(custom command): support multiple contexts within one command by @yam-liu in #3784
    • You can now use a comma-separated list of contexts for which a custom command can be invoked. For example:
     customCommands:
       - description: 'Add empty commit'
         key: 'E'
         context: 'commits,files'
  • Improve mouse support for commit message panel by @stefanhaller in #3836
  • Make auto-staging resolved conflicts optional by @stefanhaller in #3870
    • If you set git.autoStageResolvedConflicts to false in your config, lazygit will no longer auto-stage files in which you've resolved merge conflicts.
  • Allow using </> and ,/. in sticky range select mode in patch explorer by @stefanhaller in #3837
  • Add Zed editor support to editorPreset by @susl in #3886

Fixes πŸ”§

Maintenance βš™οΈ

New Contributors

Full Changelog: v0.43.1...v0.44.0

v0.43.1

13 Jul 10:28
71ad3fa
Compare
Choose a tag to compare

What's Changed

Fixes πŸ”§

Full Changelog: v0.43.0...v0.43.1

v0.43.0

13 Jul 05:39
e1d973d
Compare
Choose a tag to compare

What's Changed

Thanks to all contributors who helped make this release happen! There's a lot of first-time contributors on this release as well so kudos to you all.

There's quite a few things in this release. I'm going to single out a couple that have changed my workflow.

Base branch stuff

lg-base-branch-demo.mov

Easier rebase onto base branch

(Add command to rebase onto base branch by @stefanhaller in #3615)

When my feature branch gets out of date with the main branch, I like to rebase it onto the main branch. Up until now, that's required:

  • Navigating to the main branch
  • Pressing 'f' to fast-forward it onto its upstream branch
  • Pressing 'r' to rebase the checked-out branch onto the main branch

That takes too long! Now you can just press 'r' followed by 'b' to rebase onto the base branch (which defaults to origin/main).

See the divergence count from the base branch

(Divergence from base branch display by @stefanhaller in #3613)

You can now also configure to see the divergence from a branch and its base branch with the following config:

gui:
    showDivergenceFromBaseBranch: arrowAndNumber # or 'onlyArrow'

This shows the divergence count in blue, next to the yellow count of divergence from the upstream branch. This is admittedly noisy, so it's an opt-in feature. But I think the noise is worth it.

If you set the config value to 'onlyArrow' it's a lot less noisy:

image

See detailed divergence from base branch

(Add command to show divergence from base branch as a left-right log by @stefanhaller in #3614)

By pressing 'u' then 'b' on a branch you can see the divergence view for that branch compared to its base branch

Improved 'Find commit for fixup' feature

(Improve the "Find base commit for fixup" command by @stefanhaller in #3602)

'Find commit for fixup' is not a very catchy name for this feature but I can't think of anything better at the moment. Nevertheless! The idea is that you often want to know for a given set of changes, which commit ought they be included in? Just press ctrl f when in the files panel and lazygit will jump the cursor to the appropriate commit to fixup.

With this release, the feature is smarter and more lenient so it's more likely to find you a match. If you haven't tried this out you should really give it a go!

find-commit-demo.mov

Other Enhancements πŸ”₯

  • Add Squash merge by @noahfraiture in #3566
    • Now when you press shift m you get the option to do a regular merge or a squash merge. If you already have muscle memory for regular merge; don't worry: it's the same sequence of keypresses.
  • Improve "Find base commit for fixup" command when there are changes for master commits by @stefanhaller in #3645
  • Allow setting the similarity threshold for detecting renames by @isti115 in #3025
    • For this, press ')' and '(' to increase/decrease the similarity threshold.
similarity-demo.mov
  • Reduce memory consumption when loading large number of commits by @stefanhaller in #3687
    • 2-6x less memory usage when dealing with lots of commits. HUGE improvement.
  • Focus on local commits view after moving code into new commit by @AzraelSec in #3577
  • Add property outputTitle to CustomCommand by @stefanhaller in #3579
  • Add user config gui.expandedSidePanelWeight by @stefanhaller in #3623
    • You can now increase the height of the selected side panel when you've configured the accordion effect
     gui:
       expandFocusedSidePanel: true
       expandedSidePanelWeight: 3
image
  • Support range select for amending commit attributes by @AzraelSec in #3587
    • This lets you select a range of commits and update the author / set the co-author on all of them at once.
lg-multi-author-select.mov

Fixes πŸ”§

Maintenance βš™οΈ

Read more

v0.42.0

19 May 10:15
6fcb7eb
Compare
Choose a tag to compare

It's time once again for a Lazygit release! This one is not as colossal as the prior release (and we intend to have smaller, more frequent releases in future) but there are plenty of good improvements here.

Thanks to all contributors who helped make this release happen! There's a lot of first-time contributors on this release as well so kudos to you all.

Thanks as usual to the wonderful @stefanhaller for creating/reviewing many of these changes, and thanks to @karimkhaleel who has also stepped up to help out with reviews.

What's Changed

Enhancements πŸ”₯

Fixes πŸ”§

Maintenance βš™οΈ

Docs πŸ“–

New Contributors

Full Changelog: v0.41.0...v0.42.0

v0.41.0

23 Mar 09:14
3675570
Compare
Choose a tag to compare

Hold on tight because this is a HUGE release! This release includes a whopping 595 commits from a period of over 7 months, from 40 different contributors. Thanks to everybody who made this possible, and apologies for taking so long to actually release it: we'll be more frequent in future!

Special thanks to Stefan Haller who is behind many of this release's changes and who has been critical in getting this release across the line.

I've made a video running through the big changes here:

What's Changed

Here's some highlighted features:

Range select

range-select

You can now press 'v' to toggle range select in any list view, just like you already could in the staging view. You can also press shift up/down to select a range. You can use range select to:

  • stage/discard a range of files
  • select multiple commits to fixup/squash/move outside an interactive rebase
  • select multiple commits to mark as fixup/squash/etc within an interactive rebase
  • select multiple commit files to discard or add to a custom patch (courtesy of @afhoffman)
  • select multiple commits to cherry-pick

I have been waiting for this feature for a very long time and it's already made me way more productive. If I need to squash a range of commits I can now easily do it directly rather than needing to squash them one-by-one, or needing to manually start an interactive rebase first. Likewise, it's much easier to select a range of files and stage them than stage them one-by-one.

This is a Breaking change: Unfortunately, the 'v' key clashes with the existing key for pasting commits (cherry-pick), so we've replaced that with shift V and changed the commit copy key to shift C. If you want the old keybindings back, you can do that like so:

keybinding:
  universal:
      toggleRangeSelect: <something other than v>
    commits:
      cherryPickCopy: 'c'
      pasteCommits: 'v'

Auto-wrap in commit editor

The commit editor now automatically hard-wraps your content by default, so you no longer need to hit the enter key yourself when you approach the margin. You can disable/configure this in your config:

git:
  commit:
    autoWrapCommitMessage: true
    autoWrapWidth: 72

Thanks to @stefanhaller for this feature.

Easier remote branch checkout

Now when you go to checkout a remote branch, either via the c keybinding in the branches view or by pressing space on a remote branch, you'll be given the choice to checkout as a local branch or as a detached head (previously it would just check it out as a detached head which typically isn't what you want). This is a Breaking change in terms of muscle memory.

Thanks to @stefanhaller for this feature.

Easier start interactive rebase

Previously, to start an interactive rebase, you would need to navigate to a base commit and press e on it. Now you can simply press i and regardless of which commit is selected, an interactive rebase will begin that includes all the commits on your branch (or if there are merge commits: all the commits up to first merge commit).

The above demo for range select showcases this.

Easier squashing of fixup! commits

In a similar vein to the above section, now when you press shift S, you're given the choice of squashing all commits above the selected commit and squashing all commits on the branch, which is what you typically want. This is a Breaking change in terms of muscle memory.

Thanks to @stefanhaller for this feature.

View divergence from upstream branch

If you press u on a local branch a menu appears which shows options relating to the branch's upstream. Now, the first option in that menu allows you to view the divergence from the upstream which shows commits to pull and commits to push

Thanks to @stefanhaller for this feature.

Find appropriate commit for fixup/amend

This one is some serious voodoo: if somebody suggests changes in a PR review, you'll often apply the changes, then go hunting for the appropriate commit to fixup/amend. Now, from the files view you can press ctrl f and if Lazygit can identify an appropriate commit with certainty, it will select that commit for you. Pretty cool!

We've made the algorithm very strict so that you can always trust the result, but this means in circumstances where we can't know for sure which commit is appropriate (such as when your changes only include added lines), it's left to you to manually find the commit. We're keen to get lots of feedback on this feature to see where the sweet spot is.

For more info see the docs

Thanks to @stefanhaller for this feature.

Delete remote branches/tags

Now when you press d on a local branch, remote branch, or tag, you're given the option to delete that branch/tag in the remote.

Thanks to @AzraelSec for this feature.

Add co-author to commit

When you press a on a commit an option now appears to add a co-author (something GitHub can read).

Thanks to @omaussa for this feature.

Filter commits by author

You can now filter commits by author via pressing ctrl s in the commits view and selecting the option to filter by author.

Thanks to @part22 for this feature.

Change branch sort order

You can now change branch sort order by pressing s in the branches view (and remote branches view). By default local branches are sorted by 'recency' meaning how recently they were checked out, but you can now sort by head commit date and alphabetically.

Thanks to @hosaka for this feature.

Better bare repo support

We have fixed a bunch of bugs relating to bare repos so if you had issues with them in the past it should work fine now.

Thanks to @jwhitley for this feature.

Miscelleneous UI changes

  • Unstaged files are now shown in white, not red, which is easier on the eyes
  • Scrollbars are thinner (and, thus, cooler)
  • Keybindings menu now has section headers (@stefanhaller)
  • Error toasts now appear for some errors (less intrusive than popups) (@stefanhaller)
  • Search history is now retained (@karimkhaleel)
  • Git log is shown by default (@stefanhaller)

More Breaking Changes πŸ’₯

  • When you press 'g' to bring up the git reset menu, the 'mixed' option is now the first and default, rather than 'soft'. This is because 'mixed' is the most commonly used option.
  • Push/pull/fetch loading statuses are now shown against the branch rather than in a popup. This allows you to e.g. fetch multiple branches in parallel and see the status for each branch.
  • The git log graph in the commits view is now always shown by default (previously it was only shown when the view was maximised). If you find this too noisy, you can change it back via ctrl L -> 'Show git graph' -> 'when maximised'
  • Filtering (e.g. when pressing '/') is less fuzzy by default; it only matches substrings now. Multiple substrings can be matched by separating them with spaces. If you want to revert to the old behavior, set the following in your config:
gui:
  filterMode: 'fuzzy'

What's Changed

All Enhancements πŸ”₯

Read more

v0.40.2

07 Aug 14:12
Compare
Choose a tag to compare

What's Changed

Fixes πŸ”§

Full Changelog: v0.40.1...v0.40.2

v0.40.1

07 Aug 12:56
579791e
Compare
Choose a tag to compare

What's Changed

Fixes πŸ”§

Maintenance βš™οΈ

Other Changes

New Contributors

Full Changelog: v0.40.0...v0.40.1

v0.40.0

05 Aug 06:27
Compare
Choose a tag to compare

πŸŽ‰ LAZYGIT FIVE YEAR ANNIVERSARY EDITION πŸŽ‰

Holy moly, has it really been 5 years since Lazygit's birth? Time flies when you're having fun.

I've written a post celebrating the anniversary here.

As for this release, we've got some great features here.

Worktrees

We now have a worktrees view so you can easily create worktrees and switch to them and so on. I'm not a big worktrees user myself so please raise an issue if you can think of places to improve the UX.

worktree_create_from_branches-compressed

Rebase --onto

Rebasing onto a marked base commit is a very useful feature that we've been sorely lacking for a while
(demo coming soon)

Auto-refresh on window focus

Auto-refresh on window activation is a complete game-changer. No more having to manually press shift R when you come back from your editor.

Nuking the worktree

We also have a fun enhancement in this release: showing an explosion animation when you nuke the working tree.

nuke-gif

You'll also notice in the readme we've got some updated demo gifs to showoff Lazygit's features. More of those to come.

What's Changed

Features ✨

Enhancements πŸ”₯

Fixes πŸ”§

Maintenance βš™οΈ

Other Changes

New Contributors

Full Changelog: v0.39.4...v0.40.0

v0.39.4

24 Jul 11:26
Compare
Choose a tag to compare

What's Changed

Enhancements πŸ”₯

  • Prompt for commit message when moving a custom patch to a new commit by @stefanhaller in #2800

Fixes πŸ”§

Docs πŸ“–

  • Add Gentoo installation documentation to README by @cova-fe in #2811

New Contributors

Full Changelog: v0.39.3...v0.39.4