Releases: jesseduffield/lazygit
v0.42.0
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 π₯
- Make spinner animation configurable by @belyakov-am in #3463
- Keep the same commit selected when exiting filtering mode by @stefanhaller in #3416
- Make URLs in confirmation panels clickable, and underline them by @stefanhaller in #3446
- Allow viewing all branches git log in status view by default @oakio in #3309
- Drop update-ref todos pointing to head by @stefanhaller in #3456
- Add config options for length of commit hash displayed in commits view by @oliviaBahr in #3505
- Show commit graph in divergence view by @stefanhaller in #3537
- Add commitPrefix config for defining a default commit message prefix across all projects by @duckbrain in #3291
- Improve
nvim-remote
(neovim) editor mode by @cmoog in #3508 - Delete and edit custom commands history items by @stefanhaller in #3534
- Support externalDiffCommand in diffing mode by @stefanhaller in #3519
Fixes π§
- Correctly request force-pushing in a triangular workflow by @stefanhaller in #3528
- Fix and speed-up stashing partial files for git version >= 2.35.0 by @dsolerh in #3569
- Improve delta pager performance by setting the
TERM
env variable by @bash in #3420 - Fix deleting update ref todos by @stefanhaller in #3439
- Fix crash when filtering the keybindings menu by @stefanhaller in #3450
- Fix excluding files in submodules or worktrees by @stefanhaller in #3432
- Fix rewording signed commits when the log.showsignature git config is true by @stefanhaller in #3431
- Better support for terminal based pinentry programs by @eldios in #3478
- Fix amend-to operation not working with non-HEAD merge commit by @brandondong in #3510
- Fix clicking in status side panel by @stefanhaller in #3547
- Fix loading commits with very long subjects by @stefanhaller in #3533
Maintenance βοΈ
- Migrate null keybindings to
<disabled>
, and remove our yaml fork by @stefanhaller in #3459 - Replace min/max helpers with built-in min/max by @Juneezee in #3482
- standardize commit hash commit sha by @pikomonde in #3398
- Bump go version to 1.22 by @jesseduffield in #3574
- Simplify error handling by @stefanhaller in #3502
- Use errors.New instead of fmt.Errorf with no parameters by @ChengenH in #3523
- chore: fix some comments and typos by @knowmost in #3535
- Fix deadlock reporting by @stefanhaller in #3550
- Only run code coverage report on non-fork branches by @jesseduffield in #3571
- pkg: fix some comment by @HongKuang in #3481
- sponsors.yml: Create PR instead of trying to push to a protected branch by @SachinVin in #3493
- pkg: fix some typos by @thirdkeyword in #3364
Docs π
- Update interactive rebase demo by @jesseduffield in #3392
- Update Busy.md by @eltociear in #3433
- Fix schema link in Config.md by @stefanhaller in #3451
New Contributors
- @bash made their first contribution in #3420
- @eltociear made their first contribution in #3433
- @belyakov-am made their first contribution in #3463
- @HongKuang made their first contribution in #3481
- @eldios made their first contribution in #3478
- @oakio made their first contribution in #3309
- @pikomonde made their first contribution in #3398
- @SachinVin made their first contribution in #3493
- @github-actions made their first contribution in #3498
- @thirdkeyword made their first contribution in #3364
- @brandondong made their first contribution in #3510
- @ChengenH made their first contribution in #3523
- @oliviaBahr made their first contribution in #3505
- @knowmost made their first contribution in #3535
- @duckbrain made their first contribution in #3291
- @dsolerh made their first contribution in #3569
- @cmoog made their first contribution in #3508
Full Changelog: v0.41.0...v0.42.0
v0.41.0
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
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 π₯
- Add range selection ability on list contexts by @jesseduffield in #3207
- Allow deleting remote tags/branches from local tag/branch views by @AzraelSec in #2738
- Add command to show divergence from upstream by @stefanhaller in #2871
- Add 'Quick start interactive rebase' action by @jesseduffield in #3213
- Add command to open git difftool by @stefanhaller in #3156
- Support editing files in existing neovim instance by @jesseduffield in #2916
- Show commit mark before showing extra info by @jesseduffield in #2928
- Jump to middle of the view when selection leaves the visible area by @stefanhaller in #2915
- Add emacs-keybinds for word navigation by @horriblename in #2935
- Add
gui.scrollOffBehavior
config for scrolling list views by half-pages by @stefanhaller in #2939 - Switch to editor from commit message panel by @stefanhaller in #2881
- Select same commit again after pressing "e" to edit a commit by @stefanhaller in #2954
- Support custom keybindings for confirm discard by @mskelton in #2960
- Allow adding a port to webDomain part of services config by @raidora in #2908
- Add icons for files with .mdx and .svelte file extensions by @hrstmr in #2889
- Section headers in keybindings menu by @stefanhaller in #2911
- Check for staged files for "Amend commit" and "Create fixup commit" by @stefanhaller in #2970
- Add support for external diff commands (e.g. difftastic) by @stefanhaller in #2868
- Save diff context size in state.yml instead of config.yml by @stefanhaller in #2969
- Support to reset the current branch to a selected branch upstream by @Azrae...
v0.40.2
What's Changed
Fixes π§
- Fix seg-fault when opening submodule in nested folder by @jesseduffield in #2903
Full Changelog: v0.40.1...v0.40.2
v0.40.1
What's Changed
Fixes π§
- update worktree icons for NerdFont V3 by @Saafo in #2895
- Fix opening lazygit in a bare repo with specified worktree by @jesseduffield in #2902
Maintenance βοΈ
- Import stefanhaller's tcell fork for real rather than just replacing it by @stefanhaller in #2888
- Don't run the check-required-label check on master by @stefanhaller in #2896
- Use nerdfont version 3 in demos by @jesseduffield in #2901
Other Changes
- Fix README.md typo backkground -> background by @mattiasJohnson in #2884
New Contributors
- @mattiasJohnson made their first contribution in #2884
- @Saafo made their first contribution in #2895
Full Changelog: v0.40.0...v0.40.1
v0.40.0
π 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.
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.
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 β¨
- Add worktrees view by @jesseduffield (with help from @kadaan) in #2147
- Rebase onto branch from a marked base commit by @stefanhaller in #2835
- Auto-refresh on window activation by @stefanhaller in #2854
Enhancements π₯
- Speed up refresh by @jesseduffield in #2841
- Add os.copyToClipboardCmd to allow for a custom command #1055 by @redstreet in #2784
- Add bisect menu entry that lets you choose bisect terms by @stefanhaller in #2838
- When bisecting, always mark the current commit as good/bad, not the selected by @stefanhaller in #2837
- Visualize local branch heads in commits panel, 2nd approach by @stefanhaller in #2775
- Allow force-tagging if tag exists by @stefanhaller in #2827
- Save IgnoreWhitespaceInDiffView in state.yml by @stefanhaller in #2830
- Show loader when rebasing by @KarlHeitmann in #2851
- Internationalise logging of commands by @KarlHeitmann in #2852
- Show visual explosion effect when nuking worktree by @jesseduffield in #2861
Fixes π§
- Fix issue where using
null
to un-map a keybinding was ignored by @hatredholder in #2832 - Show error when trying to open patch menu with an empty patch by @stefanhaller in #2829
- Fix merge status for update-ref command by @stefanhaller in #2845
- Stop worktrees view from stealing the window by @jesseduffield in #2863
- Fix confirmation view sizing by @jesseduffield in #2879
Maintenance βοΈ
- Standardise on using lo for slice functions by @jesseduffield in #2846
- Remove redundant secureexec package by @jesseduffield in #2847
- Add automated demo recordings by @jesseduffield in #2853
- Remove file watcher code by @jesseduffield in #2865
- Add more demos to the README by @jesseduffield in #2866
- Move features to top of readme by @jesseduffield in #2867
- Add more demos by @jesseduffield in #2874
Other Changes
- Create demo output dir if it doesn't already exist by @jesseduffield in #2857
New Contributors
- @hatredholder made their first contribution in #2832
- @redstreet made their first contribution in #2784
- @kadaan made their first contribution in #2147
- @KarlHeitmann made their first contribution in #2851
Full Changelog: v0.39.4...v0.40.0
v0.39.4
What's Changed
Enhancements π₯
- Prompt for commit message when moving a custom patch to a new commit by @stefanhaller in #2800
Fixes π§
- Support typing special characters like '[' on non-english keyboards by @Calvin1602 in https://github.com//pull/2818
- Fix infinite wait on push/pull on windows by @jesseduffield in #2821
Docs π
New Contributors
- @cova-fe made their first contribution in #2811
- @Calvin1602 made their first contribution in #2818
Full Changelog: v0.39.3...v0.39.4
v0.39.3
What's Changed
Enhancements π₯
- Include more commit authors in author suggestions by @jesseduffield in #2807
- Use fuzzy search when filtering a view by @jesseduffield in #2808
- Better tag creation UX by @jesseduffield in #2809
- Better word wrap by @jesseduffield in #2812
Fixes π§
- Fix crash caused by simultaneous read/write of scanner buffer by @jesseduffield in #2813
Full Changelog: v0.39.2...v0.39.3
v0.39.2
This release fixes an issue on windows where the main view would stop rendering new content. This issue mostly affected users running git through a shim. Thanks to @AndrewSav for the investigation and fix #2806
v0.39.1
Full Changelog: v0.39.0...v0.39.1
What's Changed
There's lots of stuff in this release! Some favourites of mine include:
- Filter functionality for branches (and some other list views) activated by '/'
- Showing commit hashes against branches (opt-in with
gui.showBranchCommitHash: true
) - Various improvements to rebasing functionality
- Nerd font 3 support
As you can see @stefanhaller is behind many of the improvements in this release so kudos to you Stefan! And thanks to all the contributors who made this release possible.
In the next release we're adding worktree support. It's a big feature so we want to get it right! If you use worktrees as part of your daily flow please respond to the poll (and even test out the draft PR) in the Worktree UX discussion
Enhancements π₯
- Support filtering on some views with '/' by @jesseduffield in #2680
- Allow scrolling side views without changing selected item by @stefanhaller in #2608
- Speed up Lazygit on windows by @jesseduffield in #2661
- Show commit hashes against branches (opt-in) by @jesseduffield in #2274
- Add config for nerd fonts version by @stefanhaller in #2731
- Show rebase todo entry for conflicted commit by @stefanhaller in #2682
- Don't keep commits that become empty during a rebase by @stefanhaller in #2644
- Show menu instead of prompt when there are conflicts in a rebase or merge by @stefanhaller in #2694
- Make "merged" take precedence over "unpushed" by @stefanhaller in #2628
- Add config for main branches by @stefanhaller in #2619
- Visualize the "ignore whitespace" config by @stefanhaller in #2641
- Support dynamically generated suggestions in custom commands prompt by @jesseduffield in #2686
- Add suggestions presets to prompts in custom commands by @jesseduffield in #2685
- Allow checking for merge conflicts after running a custom command by @jesseduffield in #2773
- Use sentence case everywhere by @jesseduffield in #2672
- Our casing as all over the place so now we're using 'Sentence case' for everything.
- More compact and flexible date format by @jesseduffield in #2676
- Add nvim and kakoune editor presets by @screendriver in #2591
- Add helix editor preset by @dvic in #2668
- Fetch from all remotes by default by @stefanhaller in #2692
- Better prompt for discarding old file changes by @stefanhaller in #2707
- Use remote upstreams of main branches to determine merged status of commits by @stefanhaller in #2725
- Always show branch heads in diff pane by @stefanhaller in #2748
- Rely on .gitconfig for verbose commit messages by @scallaway in #2664
- Show all tags in commits panel by @stefanhaller in #2776
- Update gitlab merge request URL to match new routing by @mazharz in #2656
- Right-align key labels in menu by @jesseduffield in #2652
- Indicate reserved menu keybindings to reduce confusion by @jesseduffield in #2651
Fixes π§
- Fix to show commitPrefixes in commit message with a new blank commit by @longlhh90 in #2612
- Fix intermittent rebase continue prompt failure by @jesseduffield in #2629
- Fix bug where discarding merge conflict file failed by @jesseduffield in #2662
- Better default text colour on light theme terminals by @jesseduffield in #2696
- Fix rendering issues in commits view by @jesseduffield in #2700
- Fix interactive rebase with git 2.25.1 and earlier by @stefanhaller in #2747
- Fix crash when a background fetch prompts for credentials by @stefanhaller in #2789
- fix kakoune binary name by @enricozb in #2708
- Fix focus issue when opening recent-repos menu at launch by @jesseduffield in #2715
- Allow discarding changes only from local commits by @stefanhaller in #2712
- Honour configured comment char on interactive rebase by @gustavopcassol in #2639
- Fix the title and text of the Discard Changes prompt by @stefanhaller in #2706
- Fix broken
git init
prompt by @jesseduffield in #2771 - Fix potentially wrong help text in commit message panel by @stefanhaller in #2777
- Fix incorrect focus in accordion mode by @jesseduffield in #2792
- Fix crash on empty menu by @jesseduffield in #2799
- Only apply right-alignment on first column of keybindings menu by @jesseduffield in #2801
- Stop hiding underscores for VSCode by @jesseduffield in #2699
Maintenance βοΈ
- Run integration tests with all supported git versions by @stefanhaller in #2754
- Add ability to update yaml path while preserving comments by @jesseduffield in #2620
- Refactor for better encapsulation by @jesseduffield in #2519
- Add convenience builder for git commands by @jesseduffield in #2645
- Construct arg vector manually rather than parse string by @jesseduffield in #2655
- Allow global logging when developing by @jesseduffield in #2671
- remove
github.com/jesseduffield/yaml
package by @Ryooooooga in #2508 - Update seconds ago function and add tests by @jesseduffield in #2695
- Support matchers on integers in integration tests by @jesseduffield in #2704
- Improve yaml_utils by @stefanhaller in #2718
- Fix typo 'EnteRefName' by @letavocado in #2750
- Track busy/idle state for integration tests by @jesseduffield in #2765
- Add test for cmd obj cloning by @jesseduffield in #2780
- Update release notes config and add CI check by @jesseduffield in #2797
- Add release config for generating release notes by @jesseduffield in #2793
- Remove Uffizzi by @jesseduffield in #2690
- Bump golang.org/x/net from 0.0.0-20220722155237-a158d28d115b to 0.7.0 by @dependabot in #2490
Docs π
- Add package statuses to readme by @jesseduffield in #2717
I18n π
- Add Traditional Chinese support by @tzengyuxio in #2688
- Add russian translation by @letavocado in #2729
New Contributors
- @screendriver made their first contribution in #2591
- @longlhh90 made their first contribution in #2612
- @mazharz made their first contribution in #2656
- @dvic made their first contribution in #2668
- @dependabot made their first contribution in #2490
- @tzengyuxio made their first contribution in #2688
- @enricozb made their first contribution in #2708
- @letavocado made their first contribution in #2729
- @gustavopcassol made their first contribution in #2639
If you contributed to this release but don't see your name here, let me know!
Full Changelog: https://github.com/jesseduffield/lazygit/compare...
v0.38.2
What's Changed
- update open docs by @jesseduffield in #2588
- Only use --empty=keep option with git versions that support it by @stefanhaller in #2585
Full Changelog: v0.38.1...v0.38.2