Releases: jesseduffield/lazygit
v0.48.0
What's Changed
Enhancements π₯
- Custom commands submenus by @stefanhaller in #4324
Maintenance βοΈ
- Refactor migrations to only marshall yaml twice by @ChrisMcD1 in #4318
Full Changelog: v0.47.2...v0.48.0
v0.47.2
Small patch release for you all. This is mainly to fix an issue with v0.47.1 which erroneously re-indented users' lazygit config files on startup.
Shout-out to @karimkhaleel for his PR with some gnarly yaml-handling code.
And a special shout-out to @ChrisMcD1 who has been pumping out many great contributions lately. Great to have you aboard.
What's Changed
Enhancements π₯
- Skip post-checkout hook when discarding changes by @stefanhaller in #4313
Fixes π§
- fix: Disable global keybinds when confirmation is active by @ChrisMcD1 in #4284
- Don't rewrite config file unnecessarily when it contains commitPrefixes by @ChrisMcD1 in #4311
- Change side panel width calculation to work for larger numbers by @ChrisMcD1 in #4287
Maintenance βοΈ
- Fix auto-release schedule by @jesseduffield in #4308
- Use indentation of 2 when rewriting auto-migrated config file by @stefanhaller in #4312
- Use refs in jsonschema by @karimkhaleel in #4309
- Improve release workflow by @jesseduffield in #4307
- Filter out dev comments from schema by @stefanhaller in #4319
- Fix release script by @jesseduffield in #4322
- Fix release script once again by @jesseduffield in #4323
Docs π
- Improve the error message when users have gpg signing turned on by @stefanhaller in #4296
Full Changelog: v0.47.1...v0.47.2
v0.47.1
What's Changed
Maintenance βοΈ
- Fix race condition with reselecting the focused branch and rendering by @stefanhaller in #4268
Full Changelog: v0.47.0...v0.47.1
v0.46.0
It's time for another Lazygit release! Thanks to all who contributed to this release.
What's Changed
Enhancements π₯
- Preserve pending commit message when closing/re-opening by @AzraelSec in #4191
- Swap position of checkout-commit and checkout-branch menu items by @stefanhaller in #4238
- In a previous release we had made it so that when you press space on a commit, the first option in the menu was to check out the corresponding branch, rather than the commit itself. We've made it so that now the first option is to check out the commit itself, for the sake of everybody's muscle memory.
- Allow user to filter the files view to only show untracked files by @jesseduffield in #4226
- Expose {{.SelectedCommitRange}} to custom commands by @stefanhaller in #4204
- Show background fetch status in bottom line by @stefanhaller in #4215
- Support copying tags to clipboard by @brunofjesus in #4218
- Add option to delete local and remote tag by @AnvarU in #4217
- Show confirmation menu when trying to amend changes while there are conflicts by @stefanhaller in #4222
- Improve error reporting on config migration by @kas2020-commits in #4210
- Show files filter status by @stefanhaller in #4230
- Improve contrast of highlighted search results by @stefanhaller in #4242
Fixes π§
- Don't try killing processes if we already know the command finished by @brandondong in #4231
- We believe this was causing all sorts of problems for windows users.
- Add '--' to 'git rev-list' to disambiguate branch name from path by @efussi in #4185
- Fix adding blank line at end of commit message by @stefanhaller in #4182
- Fix checking out a different branch while pushing a branch for the first time by @stefanhaller in #4214
- Fix tag being truncated when copying to clipboard by @brunofjesus in #4232
- Disable staging and unstaging lines or hunks when the diff context size is 0 by @stefanhaller in #4235
- Fix incorrect stash diff after rename by @brandondong in #4213
- Fix possible crash when deleting a branch while filtering is active by @stefanhaller in #4195
- Fix pasting multi-line text into commit message panel by @stefanhaller in #4234
- fix: properly detect icon for BAZEL and WORKSPACE files by @PeterCardenas in #4252
- Fix json schema for context of CustomCommand by @stefanhaller in #4255
Maintenance βοΈ
- Bump go-deadlock version to fix crash with go 1.23 in debug mode by @ChrisMcD1 in #4248
- Fix auto-release workflow by @jesseduffield in #4265
I18n π
- Update translations; includes a new Portuguese translation by @stefanhaller in #4250
New Contributors
- @efussi made their first contribution in #4185
- @brunofjesus made their first contribution in #4218
- @AnvarU made their first contribution in #4217
- @kas2020-commits made their first contribution in #4210
- @ChrisMcD1 made their first contribution in #4248
- @PeterCardenas made their first contribution in #4252
Full Changelog: v0.45.2...v0.46.0
v0.45.2
What's Changed
Enhancements π₯
- Add ability to configure branch color patterns using regex by @mtrajano in #4130
- Collapse/uncollapse all files in tree by @mtrajano in #4131
- Improve undo action to restore files upon undoing a commit by @gabriellanata in #4167
Fixes π§
- Bump gocui (and tcell) by @stefanhaller in #4166
Maintenance βοΈ
- Cut a new release automatically each month by @jesseduffield in #4146
- Bump tcell to fix broken deployment by @jesseduffield in #4178
New Contributors
- @mtrajano made their first contribution in #4130
- @gabriellanata made their first contribution in #4167
Full Changelog: v0.45.0...v0.45.2
v0.45.0
Lots of great improvements in this one! Thanks to all the contributors who helped make this release happen.
Apologies for the long waits between releases. As of #4146 we're now (almost) guaranteed to do monthly releases.
What's Changed
Enhancements π₯
- Better branch delete confirmation by @stefanhaller in #3915
- Add a menu item to delete both local and remote branch at once by @stefanhaller in #3916
- Auto-render hyperlinks by @stefanhaller in #3914
- Allow pasting commits multiple times by @stefanhaller in #3983
- Add config option to disable switching tabs with panel jump keys (and disable by default) by @hgreenstein in #3927
- We jumped the gun on this change in the last release: having the number key both select a panel and switch tabs was bad for muscle memory so it's that behaviour is now disabled by default.
- Add new filter to only show tracked files in Files panel by @veremenko-y in #4024
- Allow DiffContextSize to be decreased to zero by @LuxxxLucy in #4050
- Allow user to select remote and branch when creating a PR by @moha-gh in #1889
- Delete range selection of branches by @stefanhaller in #4073
- Show the number of lines changed per file in working file tree view by @johannaschwarz in #4015
- Drop merge commits by @stefanhaller in #4094
- Wrap lines in staging view by @stefanhaller in #4098
- Allow to switch branches in Commit View (#4115) by @seflue in #4117
- Allow on prem Azure DevOps Server pull request by @waynebowie99 in #3954
- Add screen-mode command line argument by @alewis001 in #4103
- Default to half-screen mode when opening with certain CLI args by @jesseduffield in #4141
- Show the alt-enter keybinding at bottom of commit description view by @stefanhaller in #4136
- Add number of commits to cherry-pick confirmation prompt by @brandondong in #4158
Fixes π§
- Fix copying commit author to clipboard by @stefanhaller in #3936
- Fix merge conflict resolution when file doesn't end with a LF by @stefanhaller in #3976
- Fix file icons by @stefanhaller in #3975
- Fix non-sticky range select after clicking in staging view by @stefanhaller in #3998
- Fix scroll position when entering staging view by clicking in the main view by @stefanhaller in #3992
- Fix mouse wheel scrolling of custom patch view by @stefanhaller in #4089
- Improve editing a commit by @stefanhaller in #4090
- Use custom context size in range diff by @stefanhaller in #4082
- commits panel: add missing default sort order by @phanirithvij in #4097
- Fix issues with opening links and files using WSL by @bottino in #3850
- Fix moving a commit across a branch boundary in a stack of branches by @stefanhaller in #4096
- Don't preserve commit message when it's unchanged from initial message by @stefanhaller in #4110
- Fix hang when returning from shell command by @stefanhaller in #4126
- Prevent killing of unrelated processes on windows by @jesseduffield in #4137
- Add worktree option to fast forwarding operation by @john-mutuma in #4051
- Don't show keybindings option in bottom line when panel is open by @stefanhaller in #4143
- Fix reset/rebase to upstream by @stefanhaller in #4151
- Avoid blank line at end of view by @stefanhaller in #4152
- Adjust line number for working copy when editing a line by @stefanhaller in #4119
- Fix
micro
editor preset by @kytta in #4156 - Use interactive shell for running shell commands only if shell is bash or zsh by @stefanhaller in #4159
Maintenance βοΈ
- Add performance improvements section to release notes by @jesseduffield in #3922
- ci: update
upload-artifact
anddownload-artifact
actions to v4 by @Juneezee in #4063 - Let schema/config.json end with a line feed by @stefanhaller in #4092
- Saner view geometry by @stefanhaller in #4085
- Cleanup background fetch by @stefanhaller in #4084
- remove duplicate secondary MouseWheelUp keybind by @samueldominguez in #4120
- enhancement: Use HEX colors on file icons instead of C256 colors by @hasecilu in #4029
- chore: use errors.New to replace fmt.Errorf with no parameters by @RiceChuan in #4107
- Fix typos by @NathanBaulch in #3920
- Bump crypto and net packages by @jesseduffield in #4144
- Tweak file icons by @jesseduffield in #4145
- Standardise on 'screen mode' naming convention by @jesseduffield in #4142
Docs π
- Fix installation for Ubuntu in README.md by @shaobosong in #4031
- Fixes to lazygit Ubuntu install instructions in README.md by @wrecklass in #3970
- Fix typos by @skoch13 in #4121
- Add vision and design principles doc by @jesseduffield in #4053
- docs: Stylize and correct the NixOS section in README.md by @wadsaek in #4135
- Update chinese translation for pull requests by @jesseduffield in #4140
- Set repology table to 3 columns by @hasecilu in #4138
- Update instructions for using OSC52 with tmux by @EliasA5 in #3597
- Update docs to describe use of custom commands without keybindings by @a-jentleman in #3846
- documentation - describe os.openLink by @smangels in #3094
- Clarify commit message prefix mechanics by @zeromask1337 in #4114
New Contributors
- @shaobosong made their first contribution in #4031
- @hgreenstein made their first contribution in #3927
- @wrecklass made their first contribution in #3970
- @veremenko-y made their first contribution in #4024
- @LuxxxLucy made their first contribution in #4050
- @phanirithvij made their first contribution in #4097
- @bottino made their first contribution in #3850
- @johannaschwarz made their first contribution in #4015
- @samueldominguez made their first contribution in #4120
- @skoch13 made their first contribution in #4121
- @wadsaek made their first contribution in #4135
- @seflue made their first contribution in #4117
- @waynebowie99 made their first contribution in #3954
- @EliasA5 made their first contribution in #3597
- @alewis001 made their first contribution in #4103
- @a-jentleman made their first contribution in #3846
- @john-mutuma made their first contribution in #4051
- @RiceChuan made their first contribution in #4107
- @NathanBaulch made their first contribution in #3920
Full Changelog: https://github.com/jesseduffield/lazygit/comp...
v0.44.1
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 π
- Update language files from Crowdin by @stefanhaller in #3898
New Contributors
- @parthokunda made their first contribution in #3919
Full Changelog: v0.44.0...v0.44.1
v0.44.0
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
- In addition to the global config file you can now create repo-specific config files inΒ
- 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.
- Now you can use
- 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.
- If you set
- 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 π§
- Allow GPG reword for last commit by @Neko-Box-Coder in #3815
- Don't exit app when GetRepoPaths call fails during startup by @ppoum in #3779
- Fix lack of icon when extension isn't lowercase by @hasecilu in #3810
- Fix redraw bug (stale content) in commits view by @stefanhaller in #3783
- Fix line coloring when using the delta pager by @stefanhaller in #3820
- Fix pressing escape after clicking in diff view by @stefanhaller in #3828
- Fix fast-forward issue caused by a conflicting tag name @Neko-Box-Coder in #3807
- Fix range select -> stage failure when deleted file is already staged by @brandondong in #3631
- Scroll views up if needed to show all their content by @stefanhaller in #3839
- Fix crash when filtering commits by @stefanhaller in #3838
- Fix cancelled autostash resulting in stuck inline status by @brandondong in #3860
- Don't allow opening a menu while the search or filter prompt is open by @stefanhaller in #3878
Maintenance βοΈ
- Reapply "Check for fixup commits on CI" by @stefanhaller in #3745
- Some cleanups for APIs related to contexts by @stefanhaller in #3808
- Improve fixup commits script by @jesseduffield in #3853
- Fix linter warnings by @stefanhaller in #3854
- Add codespell support (config, workflow to detect/not fix) and make it fix few typos by @yarikoptic in #3751
- Get rid of a lot of error return values by @stefanhaller in #3890
- Add a readme file for the JSON files in pkg/i18n/translations by @stefanhaller in #3781
New Contributors
- @yam-liu made their first contribution in #3784
- @ppoum made their first contribution in #3779
- @Neko-Box-Coder made their first contribution in #3815
- @yarikoptic made their first contribution in #3751
- @susl made their first contribution in #3886
Full Changelog: v0.43.1...v0.44.0
v0.43.1
What's Changed
Fixes π§
- Fix language auto detection by @stefanhaller in #3744
Full Changelog: v0.43.0...v0.43.1
v0.43.0
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:

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.
- Now when you press
- 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

- 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
- Show "exec" todos in the list of rebase todos by @stefanhaller in #3654
- Search the model instead of the view in the commits panel by @stefanhaller in #3642
- Add prompt to the remote branch checkout menu by @stefanhaller in #3652
- Always show the "Discard unchanged changes" menu item by @stefanhaller in #3683
- Show current value in menus by @stefanhaller in #3628
- Add command to paste commit message from clipboard by @WaterLemons2k in #3676
- Stagger popup panels by @stefanhaller in #3694
- Make commit author length configurable by @stefanhaller in #3688 (initial implementation by @anikiforov)
- Make opening git difftool more consistent by @part22 in #3691
- Update tracking behaviour for branches created from remote branches by @part22 in #3712
- Allow setting a default name when creating new branches by @elliotcubit in #3487
- Add Token credential request handling by @gmlexx in #3647
- Switch between multiple log views by @mkock in #3354
- Faster startup by @jwhitley in #3284
- Extend icon coverage on remotes and file extensions by @hasecilu in #3484
- Add nerdfont icons for .bicep & .bicepparam files by @scottmckendry in #3053
Fixes π§
- Fix tooltip for fixup command by @stefanhaller in #3601
- Fix pushing to branch when upstream not stored locally by @stefanhaller in #3619
- (#3618) Fix pushing a branch to remote with a different name causing error by @JordanllHarper in #3630
- Fix secondary window resize by @AzraelSec in #3637
- Fix truncation of branch names containing non-ASCII characters by @stefanhaller in #3685
- Fix duplicate keybinding suggestions in status bar after switching repos by @stefanhaller in #3660
- Fix PTY layout problems by @stefanhaller in #3658
- Fix custom patch operations for added files by @stefanhaller in #3684
- Improve render performance by @stefanhaller in #3686
- Fix wrong highlight in staging panel when entering file with only staged changes by @stefanhaller in #3667
- Always reapply filters on filtered views when model changes, even inactive ones by @stefanhaller in #3697
- Turn off the highlight of the suggestions panel when it loses focus by @stefanhaller in #3696
- Fix running lazygit with a language other than English on Windows by @stefanhaller in #3705
- Fix multi selection stage/discard not working for files with substrings by @brandondong in #3599
- Only add commit prefix if branch name matches regex pattern by @phaze-ZA in #3703
Maintenance βοΈ
- Add default lazygit config generation in Config.md from JSON schema by @karimkhaleel in #3565
- Remove hint about Config.md from PR template by @stefanhaller in #3578
- Add
copyloopvar
to enabled linters by @kyu08 in #3586 - Add
lint
to make target by @kyu08 in #3593 - Delete the TODO comment about enabling
goconst
in the future from.golangci.yml
by @kyu08 in #3596 - Pin golangci version to 1.58 by @stefanhaller in #3611
- Improve branch and reflog loading when sorting branches by date by @stefanhaller in #3609
- Fix boolean config keys not appearing in the generated Config.md by @stefanhaller in #3622
- Make profiling easier by @stefanhaller in #3634
- Update
rebase_onto
demo test to match new the rebase menu title by @AzraelSec in #3636 - Include demos when running integration tests on CI by @stefanha...