Repository navigation
Releases: jesseduffield/lazygit
Release list
v0.66.2
What's Changed
Enhancements π₯
- Improve display and handling of deleted submodules and nested repos/worktrees by @stefanhaller in #6134
Fixes π§
- Fix diff rendering after scrolling far down by @stefanhaller in #6120
- Make double-click detection more precise by @stefanhaller in #6123
- Exit gracefully when a repo or worktree gets deleted from under lazygit by @stefanhaller in #6129
- Fix "Jump to File" menu showing only half of the entries, in some rare cases by @stefanhaller in #6136
Maintenance βοΈ
- Restore the terminal more reliably after a panic by @stefanhaller in #6124
- Bump github.com/xo/terminfo from 1.0.0 to 1.2.0 by @dependabot[bot] in #6053
- Bump go version to 1.26 by @stefanhaller in #6137
- Bump golang.org/x/sys from 0.47.0 to 0.49.0 by @dependabot[bot] in #6125
- Bump golang.org/x/sync from 0.22.0 to 0.24.0 by @dependabot[bot] in #6127
- Bump github.com/cli/go-gh/v2 from 2.13.0 to 2.16.2 by @dependabot[bot] in #6128
- Bump github.com/gdamore/tcell/v3 from 3.5.0 to 3.6.0 by @dependabot[bot] in #6126
Performance Improvements π
- Improve performance with very long diffs by @stefanhaller in #6121
Full Changelog: v0.66.1...v0.66.2
v0.66.1
A few bug fixes for regressions introduced with the last release, and also some for older bugs.
One visible change is that the narrow selection bar in the focused diff view is now shown on both sides of the view rather than just on the left. This should improve usability for users with very large monitors, especially when using a side-by-side diff renderer.
For the changes of the last big release, see v0.66.0.
The changes in detail
Enhancements π₯
- Allow scrolling the diff view horizontally when gui.wrapLinesInDiffView is off by @stefanhaller in #6109
- Show the diff view's narrow selection bar on the right edge too by @stefanhaller in #6105
Fixes π§
- Fix staging diff hunks when the diff.mnemonic git config is true by @stefanhaller in #6099
- Show errors for unresolvable diff lines by @stefanhaller in #6100
- Fix double-width characters in the last column drawing over the view's frame by @stefanhaller in #6106
- Fix search match highlighting when a custom patch is active by @stefanhaller in #6107
- Open files of a branch's diff from the worktree that has it checked out by @stefanhaller in #6104
- Don't log the diff renderer probe in the command log by @stefanhaller in #6112
Full Changelog: v0.66.0...v0.66.1
v0.66.0
This is by far the biggest release since I took over maintainership from Jesse, and some of the changes deserve a bit more explanation than usual.
-
Staging hunks is now done directly from the main view.
There used to be a separate staging panel that you had to enter if you wanted to stage individual diff hunks; it was limited to one file at a time, and showed the raw git diff rather than the configured diff renderer. This is gone; the main view now has a selection when you focus it, and you can act on the selected hunk or line directly there:
- press space to stage a hunk or range of lines
- navigate to the next/previous hunk with
<right>/<left>, or the next/previous file withn/N - press
eto jump to the editor on the selected line - press
dto discard a hunk.
Many other enhancements were added to this new interactive diff view:
- alt-click a line to jump to that line in the diff view (this works even when a popup panel is showing above it, e.g. the commit message editor)
- press
<ctrl-g>to see a menu with all the files in the diff, to quickly jump to one of them - the files in the diffstat below the commit message are clickable hyperlinks that take you to the clicked file in the diff, like the
<ctrl-g>menu does - when changing the diff context using
{/}, or when toggling the "ignore whitespace" option (<ctrl-w), the scroll position is preserved
If you use a custom diff renderer, all of this works with the renderer's output, as long as it supports the new OSC protocol that was introduced for this. Delta and Diff-so-fancy already do, so if you use one of these, be sure to update them to the latest version. There is support for difftastic too, but it hasn't been accepted upstream, so you'll have to build it yourself from this PR. If you use any other diff renderer, please file an issue so that we can add support for it.
-
Better support for stacked branches.
- You can now push or force-push all branches of a stack at once, simply by pushing the topmost one. Lazygit will ask you if you want to push the others as well.
- Same for pulling: if a branch stack was rebased by someone else, you can pull the topmost branch and lazygit will ask you if you want to pull the other branches in the stack too, without checking them out.
- Branches of a stack are now listed in order in the branches panel. When rebasing a stack it is common for all branch tips to get the same committer date, in which case git sorts them alphabetically, which is confusing. We now have extra logic to preserve the stack order in this case.
- Unrelated to stacks (but common to show up in that case): when a branch diverges from its upstream (you see
β3β5) it was impossible to tell whether that was because you rebased or rewrote the branch, in which case you want to force push, or because someone else rebased the branch, in which case you want to pull it. Lazygit can now distinguish these cases, and will show theβ3β5in a dimmer yellow in the latter case. What's more, in this latter case you can "pull" the branch without checking it out by pressingf, like you already could for branches showingβ7.
-
Dark and light themes.
Lazygit now determines whether your terminal has a dark or light background, and can use different color themes for each; it can also switch between the two dynamically if your terminal does. You can also pass this information on to your diff renderer if you use one that needs it, by using the new
{{colorScheme}}template variable in the renderer command. -
Better rendering of the commit graph.
Since the commit graph uses box drawing characters it could only be an approximation; some graph topologies can't be rendered faithfully this way. We now make use of branch drawing characters if the terminal supports them, which solves this problem and also looks better; see #6077 for details.
All changes in detail
Features β¨
- Stage, unstage and discard changes directly from the focused main view by @stefanhaller in #6035
Enhancements π₯
- Improve the Recent Repos menu by @stefanhaller in #6016
- List stacked branches in stack order by @stefanhaller in #6024
- Improve the randomly picked author colors by @stefanhaller in #6062
- Allow telling diff renderers whether the terminal is dark or light by @stefanhaller in #6063
- Add dark and light color themes by @stefanhaller in #6065
- Push all branches of a rebased branch stack at once by @stefanhaller in #6045
- Use
fto "fast-forward" branches whose upstream branch was rewritten by @stefanhaller in #6067 - Auto-forward branches even if checked out in another worktree by @stefanhaller in #6069
- Offer to pull all branches in a stack when pulling the topmost one by @stefanhaller in #6070
- Delete or push multiple tags at once by @stefanhaller in #6071
- Make shift-backspace do the same as backspace in editors by @stefanhaller in #6078
- Improve the rendering of the commit graph for terminals that support it by @stefanhaller in #6077
- Select, navigate and edit diff lines in the focused main view by @stefanhaller in #6031
- Keep your scroll position in the diff when the diff is rendered again by @stefanhaller in #6032
- Copy the selected diff lines from the focused main view by @stefanhaller in #6034
- Build custom patches directly from a commit's diff by @stefanhaller in #6039
- Remove the staging and patch-building panels by @stefanhaller in #6040
- Alt- or shift-click a diff line to open it in your editor by @stefanhaller in #6041
- Open the selected diff line in the branch's pull request by @stefanhaller in #6042
- Jump to a file of the diff from a menu by @stefanhaller in #6043
- Link the file names in a diffstat to where each file's diff begins by @stefanhaller in #6044
- Keep copied commits when switching to another worktree or repo by @stefanhaller in #6090
Fixes π§
- Fix the Commits panel's column widths when scrolling during interactive rebase or bisect by @stefanhaller in #6022
- Keep the outer folder selected when a folder path in the files panel splits up by @stefanhaller in #6037
- Avoid showing pull request icons with a delay on startup even though they are cached by @stefanhaller in #6049
- Fix drawing git's diff stat after switching screen modes by @stefanhaller in #6087
- Fix wrong main view content in rare edge case situations by @stefanhaller in #6089
- Fix the rule below a pull request's header being rendered with the wrong width by @stefanhaller in #6091
Maintenance βοΈ
- Remove codespell again by @stefanhaller in #6028
- Add gopls to the nix dev shell by @stefanhaller in #6047
- Render diffs without a PTY on Windows by @stefanhaller in #6025
- Work out which file and line a row of a diff belongs to by @stefanhaller in #6026
- Support diff renderers that emit OSC 1717 diff line metadata by @stefanhaller in #6029
- Always show a file's staged changes in the "secondary" context by @stefanhaller in #6033
Docs π
- Change the demo gifs to videos and update them for the newly added features by @stefanhaller in #6073
I18n π
- Update translations from Crowdin by @stefanhaller in #6092
Full Changelog: v0.65.1...v0.66.0
v0.65.1
What's Changed
Fixes π§
- Fix Esc being handled with significant delay on some terminals by @stefanhaller in #6011
- Avoid loading or migrating the user config in daemon mode by @stefanhaller in #6001
Maintenance βοΈ
- Allow running tests from a tarball by @stefanhaller in #6003
Full Changelog: v0.65.0...v0.65.1
v0.65.0
What's Changed
Enhancements π₯
- Draw the UI in a more inactive look when the window is not focused by @stefanhaller in #5935
- Keep the last conflict file selected after resolution by @stefanhaller in #5936
- Auto-select the conflicted commit when stopping in rebase by @stefanhaller in #5937
- Keep showing files whose conflicts have been resolved by @stefanhaller in #5940
- Allow filtering worktrees by branch name in Worktrees pane by @stefanhaller in #5980
- Allow filtering the keybindings and recent repos menus more directly (simply by typing) by @stefanhaller in #5985
Fixes π§
- Scroll the selection into view by default again by @stefanhaller in #5928
- Disable staging all files when there are none to stage by @stefanhaller in #5932
- Fix flicker, scroll glitches, and crashes in async diff rendering by @stefanhaller in #5938
- Show renames when selecting a directory that a file was moved into or out of by @stefanhaller in #5924
- Fix visual glitches when moving a rebase todo by @stefanhaller in #5977
- Validate the context names in the "context" field of custom commands by @stefanhaller in #5989
- Fix some obscure selection highlighting bugs by @stefanhaller in #5990
- Re-render the focused main view if its content changes while it is being searched by @stefanhaller in #5993
Maintenance βοΈ
- Bump gofumpt to version 0.11.0 by @stefanhaller in #5925
- Avoid gofumpt'ing other worktrees by @stefanhaller in #5931
- Two small improvements to the debug log by @stefanhaller in #5933
- Bump golangci-lint to v2.12.2 by @stefanhaller in #5941
- Bump github.com/xo/terminfo from 0.0.0-20220910002029-abceb7e1c41e to 1.0.0 by @dependabot[bot] in #5950
- Bump github.com/stretchr/testify from 1.11.1 to 1.12.1 by @dependabot[bot] in #5968
- Bump github.com/gdamore/tcell/v3 from 3.4.1 to 3.4.2 by @dependabot[bot] in #5970
- Bump github.com/sirupsen/logrus from 1.9.4 to 1.10.2 by @dependabot[bot] in #5987
Docs π
- Fix example for args field in rawGit diff renderer docs by @stefanhaller in #5927
I18n π
- Update translations from Crowdin by @stefanhaller in #5994
Performance Improvements π
- Improve startup time by @stefanhaller in #5934
- Improve performance of moving rebase todos by @stefanhaller in #5978
Full Changelog: v0.64.1...v0.65.0
v0.64.1
What's Changed
This fixes a few regressions that were introduced in the last release, and some long-standing bugs that I didn't see any reason to hold back until the next big one.
Fixes π§
- Fix transitions of entering and exiting filtering mode (e.g. by path or author) by @stefanhaller in #5897
- Fix race in "Stash staged changes" on git versions before 2.35.0 by @stefanhaller in #5903
- Fix several problems with repos whose git dir lives outside the working tree by @stefanhaller in #5910
- Update the UI after stash operations in a single frame by @stefanhaller in #5905
- Honor the conflict-marker-size gitattribute by @stefanhaller in #5902
- Fix hang on quit when confirmOnQuit is true by @stefanhaller in #5919
- Fix pull requests silently disappearing until lazygit is restarted by @stefanhaller in #5921
Maintenance βοΈ
- Don't let integration tests race a background git repack by @stefanhaller in #5898
- update Nix flake dependencies by @TyceHerrman in #5894
- Simplify the run_integration_tests.sh script by @stefanhaller in #5908
- Bump actions/setup-go from 6 to 7 by @dependabot[bot] in #5843
- Bump github.com/kyokomi/emoji/v2 from 2.2.13 to 2.2.14 by @dependabot[bot] in #5813
- Bump mheap/github-action-required-labels from 5.5.2 to 5.6.0 by @dependabot[bot] in #5769
- Bump github.com/lucasb-eyer/go-colorful from 1.4.0 to 1.4.1 by @dependabot[bot] in #5916
- Bump JamesIves/github-sponsors-readme-action from 1.6.0 to 1.6.1 by @dependabot[bot] in #5917
Full Changelog: v0.64.0...v0.64.1
v0.64.0
What's Changed
This release has massive changes, but most of them should hopefully not be visible: I completely overhauled lazygit's concurrency model, which was, let's say, less than robust; there were lots of data races, and we were just lucky that this didn't result in crashes or misbehavior more often. We now have a robust concurrency model with no known data races, and in fact we run our integration test suite on CI with the -race flag to prove that. The user visible part of this is that some operations run a little more smoothly now; for example, there used to be an ugly spinner freeze at the end of checking out a branch, which is now gone.
However, since the changes were so massive there's a higher-than-usual chance of regressions, so please report any that you find.
Apart from that, we also have a few useful enhancements; the most notable one is probably that we now show the Github checks status of pull requests in the branches panel.
Enhancements π₯
- Show a spinner for more long-running operations by @stefanhaller in #5765
- Remove the BLOCK_UI refresh mode by @stefanhaller in #5790
- Support a
{{diffContext}}template variable in external diff command by @stefanhaller in #5841 - Some small UI polish by @stefanhaller in #5853
- Auto-scroll when dragging to create range selection in staging view by @stefanhaller in #5855
- Create a range selection in list views by dragging with the mouse by @stefanhaller in #5856
- Reorder commits (or rebase todos) by dragging with the mouse by @stefanhaller in #5857
- Rework the custom pager config (rename to diff renderer) by @stefanhaller in #5870
- Show a Github PR's combined checks state in branches list (and main view for selected branch) by @stefanhaller in #5874
Fixes π§
- Fix stuck inline status when pushing/fetching by @stefanhaller in #5768
- Escape the merge conflicts view before prompting to continue the rebase by @stefanhaller in #5822
- Fix side panel rendering when branches/commits are not their panel's first tab by @stefanhaller in #5825
- Suppress output from a few git commands that pollute the command log by @stefanhaller in #5834
- Fix stall with ctrl+z and fg by @stefanhaller in #5830
- Fix more problems related to concurrent repo switch and background refresh by @stefanhaller in #5839
- Fix Windows crash when switching to fullscreen mode with a custom pager by @stefanhaller in #5838
- Fix multi-selection of files with common prefix not working in commit files panel by @stefanhaller in #5868
- Support absolute paths when detecting edit preset from EDITOR env var by @stefanhaller in #5876
- Exclude more commit trailers from auto-wrapping by @stefanhaller in #5871
- Prevent stale index.lock files from diffs rendered through a pty on Windows by @stefanhaller in #5888
- Fix orphaned processes on Windows when quickly navigating between commits by @stefanhaller in #5885
Maintenance βοΈ
- Perform refresh model and view updates on the UI thread instead of using mutexes by @stefanhaller in #5767
- Fix data race with status string by @stefanhaller in #5777
- Fix data race with command log by @stefanhaller in #5779
- Make integration tests using commits more robust by @stefanhaller in #5782
- Synchronize ViewBufferManager.Close with a starting task by @stefanhaller in #5786
- Make model<->view index conversions independent of rendering by @stefanhaller in #5785
- Fix idle notification deadlock by @stefanhaller in #5821
- Bump tcell to an unreleased snapshot to fix a shutdown race by @stefanhaller in #5824
- Fix command log streaming race by @stefanhaller in #5789
- Synchronize async view rendering by @stefanhaller in #5791
- Run tests with race detection on CI by @stefanhaller in #5792
- Gocui mouse event fixes by @stefanhaller in #5854
- Move Github PR cache out of state.yml into a separate file by @stefanhaller in #5884
- Make justfile commands available in the Nix development shell by @TyceHerrman in #5890
Docs π
- Clarify contribution policy by @stefanhaller in #5809
I18n π
- Update translations from Crowdin by @stefanhaller in #5891
Performance Improvements π
- Make scrolling down a very long diff with the scroll wheel much smoother by @stefanhaller in #5780
New Contributors
- @TyceHerrman made their first contribution in #5890
Full Changelog: v0.63.1...v0.64.0
v0.63.1
Fixes for a few regressions introduced in the v0.63.0 release.
What's Changed
Fixes π§
- Improve index.lock retry mechanism by @stefanhaller in #5788
- Fix userEvents panic by @stefanhaller in #5793
- Fix a deadlock on Windows when switching between longer diffs by @stefanhaller in #5815
Maintenance βοΈ
- Allow releasing from a branch other than master by @stefanhaller in #5819
Full Changelog: v0.63.0...v0.63.1
v0.63.0
What's Changed
Enhancements π₯
- Add direnv support by @stefanhaller in #5660
- Improve cycling through multiple pagers by @stefanhaller in #5678
- Detect external repo changes via background polling by @stefanhaller in #5662
- Make the side panels configurable by @stefanhaller in #5702
- Add a global keybinding for editing the config file by @stefanhaller in #5728
- Improve resolving non-textual and submodule merge conflicts by @stefanhaller in #5735
- Auto-dismiss the continue-rebase prompt when it becomes stale by @stefanhaller in #5758
- Support custom pagers and passphrase prompts on Windows by @stefanhaller in #5740
- Make creating worktrees simpler and less error-prone by @stefanhaller in #5741
- Improve deleting worktrees and their branches by @stefanhaller in #5748
- Allow overriding the platform used for default keybindings by @stefanhaller in #5671
- Add
gui.shrinkSidePanelsToContentoption by @stefanhaller in #5754 - Show renamed files in the custom patch builder by @stefanhaller in #5759
Fixes π§
- Fix unstaging a submodule with dirty content by @stefanhaller in #5666
- Fix coloring of wrapped delta lines by @stefanhaller in #5711
- Fix Files Panel artefacts during rebase commands by @stefanhaller in #5661
- Keep selected commits stable across refreshes by @stefanhaller in #5717
- Fix quoting of shell commands on Windows by @stefanhaller in #5704
- Silently consume unrecognized or malformed escape sequences by @stefanhaller in #5738
- Don't include common ancestor when picking "both" for a conflict in diff3 style by @stefanhaller in #5747
Maintenance βοΈ
- Some fixes to our infrastructure by @stefanhaller in #5705
- Restructure the
justrecipes for running integration tests by @stefanhaller in #5720 - Fix flaky TestNewCmdTaskInstantStop test by @stefanhaller in #5743
- Bump golang.org/x/sync from 0.20.0 to 0.21.0 by @dependabot[bot] in #5684
- Bump golang.org/x/sys from 0.45.0 to 0.46.0 by @dependabot[bot] in #5685
- Bump github.com/sahilm/fuzzy from 0.1.2 to 0.1.3 by @dependabot[bot] in #5706
- Bump actions/cache from 5 to 6 by @dependabot[bot] in #5722
- Bump actions/checkout from 6 to 7 by @dependabot[bot] in #5723
- Bump goreleaser/goreleaser-action from 7.2.2 to 7.2.3 by @dependabot[bot] in #5745
- Bump golangci/golangci-lint-action from 9.2.0 to 9.3.0 by @dependabot[bot] in #5746
- Bump golang.org/x/net from 0.47.0 to 0.55.0 by @dependabot[bot] in #5752
- Pin gofumpt version to 0.9.2 by @stefanhaller in #5753
- Fix a few flaky tests by @stefanhaller in #5756
I18n π
- Update translations from Crowdin by @stefanhaller in #5760
Performance Improvements π
- Prevent staging from becoming slower over time by @stefanhaller in #5712
Full Changelog: v0.62.2...v0.63.0
v0.62.2
This fixes another small regression introduced in 0.62.0. For the full list of changes in 0.62, see here.
What's Changed
Fixes π§
- Fix the waiting status display for synchronous operations by @stefanhaller in #5659
Full Changelog: v0.62.1...v0.62.2