simple terminal UI for git commands
Most recent patch: v0.38.2
We've got lots of goodies in this release. Some notable improvements are a revamped commit message panel (@seand52), much better interactive rebase behaviour (@stefanhaller), and much less error-prone custom patch behaviour (also @stefanhaller).
As you can see, @mark2185 and @Ryooooooga continue their reign as top contributors, but we are now also joined by @stefanhaller who is behind many of the big improvements in this release. I'd also like to give a special shoutout to @seand52 who's behind the revamped commit message panel. And thank you to all the other contributors who contributed towards this release: @AKARSHITJOSHI, @axieax, @AzraelSec, @humblepenguinn, @jbrains, @jenskutilek, @knutwalker, @pereBohigas, @scallaway, @shinhs0506, @ShrutiC-git, @TylerBarnes, and @yk-kd.
As always if you're interested in contributing to Lazygit, don't hesitate to pick an issue and have a Go (pardon the pun), and if you'd like to support me please consider donating.
On a more boring note intended for current/future contributors, we've now fully migrated to a new integration test pattern which makes it much easier to test your changes and prevent regressions. We've also got a huge refactor PR (https://github.com/jesseduffield/lazygit/pull/2519) that's about to go in right after this release goes out, so if you have a PR open that now has conflicts, reach out to me (@jesseduffield) and I can help resolve them.
gui.border
(single/double/rounded/hidden) (@yk-kd)rebase.updateRefs
git config (@stefanhaller)lazygit log
, ensure panel is properly focused (@stefanhaller)Full Changelog: https://github.com/jesseduffield/lazygit/compare/v0.37.0...v0.38.0
(Jesse: I need to go to sleep right now but I'll clean this changelog up when I get the chance!)
git push --force-if-includes
by @Ryooooooga in https://github.com/jesseduffield/lazygit/pull/2333
git.commit.verbose
to accept "default" by @Ryooooooga in https://github.com/jesseduffield/lazygit/pull/2343
ReplacePlaceholderString
by @Ryooooooga in https://github.com/jesseduffield/lazygit/pull/2376
git.log.order
by @Ryooooooga in https://github.com/jesseduffield/lazygit/pull/2401
Full Changelog: https://github.com/jesseduffield/lazygit/compare/v0.36.0...v0.37.0
We've got a whole lot of stuff in this release: improvements to the editor, better custom commands support, snappier staging of files, a tonne of bug fixes, and lots more.
One particularly cool thing that we've added is Github codespaces support (in the repo, not within the Lazygit program itself), so if you've got your eye on an open issue and want to move things along, consider spinning up the lazygit codebase in a code_space_ and having a go at adding a feature / fixing a bug all from the comfort of your browser! See here for more info.
As you can see @Ryooooooga and @mark2185 continue to kick goals with a heap of features and bug fixes in this release, but we also have a whole host of new contributors too. If you want to get involved in contributing, you can peruse the issues board for issues with the good-first-issue label, or jump into the Fortress of Laziness, our new discord server
OSCommand.Quote
to be invoked within a custom command by @Ryooooooga in https://github.com/jesseduffield/lazygit/pull/2193
notARepository: quit
config option to exit Lazygit if run from outside a git repo by @Ryooooooga in https://github.com/jesseduffield/lazygit/pull/2098
null
in keybindings by @Ryooooooga in https://github.com/jesseduffield/lazygit/pull/2222
Full Changelog: https://github.com/jesseduffield/lazygit/compare/v0.35.0...v0.36.0
Nerd fonts now supported! (@Ryooooooga)
Scrollbars! (non-interactive but cool nonetheless)
Diff hunks can now be edited directly (via a subprocess) (@Ryooooooga)
You can open lazygit to the panel that you care about e.g. run lazygit log
to open lazygit to the commits panel. (@HiromasaNojima)
Most menus now have their own keybindings for each menu item, which should speed things up for power users.
You can now easily set/unset the upstream of a branch (@mark2185)
You can now select to stash exclusively unstaged/staged files (@mark2185)
Improved update flow (@moha-gh)
Fixed issue where we duplicated line breaks when parsing a commit message Don't duplicate line breaks when retrieving commit message (@moha-gh)
Some hard-to-reverse actions now have confirmation popups given it's easy to accidentally press the wrong key.
'Gone' branches are now marked as such
More commit attributes can be copied with the 'y' key (@mark2185)
Custom commit author colours can now be specified with regular names (e.g. 'red') instead of only hex codes. (@Ryooooooga)
Commit author can now be set to another author or reset to the current git user (thanks @JensPfeifle)
Auto-refresh of files can be disabled with the git.autoRefresh
config option (@moha-gh)
We now (again) honour push.default config value. In general we want to err on the side of having git commands do the same thing that would happen if you ran them directly from the terminal.
Files can now be opened from the merge conflicts panel (thanks @Ryooooooga)
You can now configure to always show the unstaged and staged changes panels, regardless of whether the selected file has both unstaged and staged changes. This can be done via gui.splitDiff: 'always'
(@HiromasaNojima)
Commit time format can now be customised via the gui.timeFormat
config key (@Ryooooooga)
We now record the current directory on switch instead of exit (@davdroman)
We now support Bitbucket server PRs (thanks @TheBlob42)
Bottom line (containing some keybindings help) can now be hidden via gui.showBottomLine: false
in your config.
You can now show the whole git graph in the commits panel by default via git.log.showWholeGitGraph: true
Some UI tweaks.
Chinese translated updated (@Crystal-RainSlide) Japanese translation added (@Ryooooooga) Korean translation added (@Shin-JaeHeon)
HUGE thankyou to all the contributors who've helped bring about this release. As you can see @mark2185 and @Ryooooooga are behind many of the the changes so a special thankyou to the both of you!
We've now on go1.18 meaning we can use generics. The lo package is our main generics helper package. I've also rolled my own, called 'generics', but I'll probably end up just committing to using lo only.
Integration tests in CI are now run in parallel, and windows builds are now properly cached, so CI runs much faster and you'll sooner know if you've broken a test.
I'm working on some tricky features like the ability to filter the contents of a list panel, some of which I've recorded on youtube. As part of that work I've had to make a detour to do some yak shaving and refactoring (which is happening in https://github.com/jesseduffield/lazygit/pull/2023)
I've also made a video showing how to add a basic feature to Lazygit for aspiring contributors. If you would like to see similar videos/docs covering other topics to make life easier for new/existing contributors, lemme know!
At some point I want to take time off work to go full-time on Lazygit (e.g. for a few months). If you have any ideas how I could raise money to do that, let me know! And of course for all those currently sponsoring, thankyou so much, it's a big motivator for me finding the time to work on this project.
Some more rambling thoughts:
gui.theme.unstagedChangesColor
config key (thanks @snorrwe )promptToReturnFromSubprocess
config key (thanks @Rambhosale )https://user-images.githubusercontent.com/8456633/150614046-861138e7-be54-47f6-ab9c-b5c22ea34ff1.mov
git.commit.signoff
key in your config (thanks @sagikazarmark)go run scripts/cheatsheet/main.go generate
The codebase has grown quite a bit since its inception and it's in need of some refactoring to make future growth easier. I've wrapped up some refactoring to the internal commands
package so that we've got better namespacing and separation of concerns, and I'll be shifting my gaze to the GUI package next. Once I'm happy with the structure of the code I'll start producing some documentation so that new contributors can easily get started on features and bug fixes. Many changes to the app are trivial to make but it can take a new contributor time to work out where everything lives in the code.