-
-
Notifications
You must be signed in to change notification settings - Fork 2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rebase onto branch from a marked base commit #2835
Conversation
@@ -307,6 +307,9 @@ func displayCommit( | |||
color := lo.Ternary(commit.Action == models.ActionConflict, style.FgRed, style.FgYellow) | |||
youAreHere := color.Sprintf("<-- %s ---", common.Tr.YouAreHere) | |||
name = fmt.Sprintf("%s %s", youAreHere, name) | |||
} else if isMarkedBaseCommit { | |||
rebaseFromHere := style.FgYellow.Sprint(common.Tr.MarkedCommitMarker) | |||
name = fmt.Sprintf("%s %s", rebaseFromHere, name) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Marked the commit as "RFC" because this is not the most beautiful design. Suggestions for a better UI welcome; but I prefer this very explicit and in-your-face visualization over just coloring the sha.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
7666b02
to
117a8eb
Compare
Haven't looked at the code but I'd like your thoughts on a more general pattern where you have a single concept of a 'marked' commit and then you have different actions associated with marked commits. For example:
This concept could be extended to other views as well e.g. mark a bunch of files and then discard them (which would spare some keybindings if you can do a drag-selection like you can when staging lines with the 'v' key) Some pros/cons of a unified approach:
Cons:
I think the pros outweigh the cons. This is not to say that we can't go with this PR's approach for now, given it'll take some time to do a unified marking UX. Keen to get your thoughts though. |
Yes, I have suggested this before (see last bullet point of this comment). However, I'm no longer so sure whether it's really a great idea.
Thoughts on bulk operations: My feeling is that this should not use a permanent marker like copy/paste does; instead, there should just be a way to extend the selection (highlight) to more than one line. For a contiguous range of lines this wouldn't be too hard; the canonical way to do that in other apps is shift-arrow. In my fork I have a commit that adds this for the staging panel, instead of the |
I had a draft response for this but I lost it! I agree with you that there are differences in the different use cases that could call for different UX flows. I also agree that we may not need to care about non-contiguous multi-selections (nothing comes to my mind where you would need it other than cherry picking but with cherry picking you could use the contiguous multi-select as a way to then add the commits to larger non-contiguous set before pasting them. I'd like to think more about this and do some POCs but I'm happy to go with your PR's approach now regardless. I'm yet to look at the code though |
117a8eb
to
da080dd
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking good!
When we show rebase menu we should tell the user that we're using the --onto arg. We could do this by having the second column of the menu show the command we're going to run in full, which should be simple enough by extracting out a GetRebaseCmdObj method and calling that then calling .ToString() on it. Or if that's too long to fit on one line we could include it in the tooltip.
As for the design, it's tricky because git itself makes things confusing by not including the base commit in the rebase which is not intuitive at all to me. Perhaps all the commits that will actually be rebased can be highlighted in some way. I'll spend some time playing with it locally.
It's also occurred to me after reading this stack overflow thread that the --onto arg can be used within a branch as a way to remove some commits. This is a contrived example, but makes me think we should try to get a keybinding that we can use for rebasing with any item that supports it (commits, branches, tags, remote branches, etc). Currently, the 'r' keyword is reserved for rewording a commit. I like the idea of having 'r' be used for rebase and 'R' being used for rewording (we already have 'R' for renaming branches). We'd need to put the reword-in-lazygit and reword-in-editor options behind a menu but it's only one extra keypress. Of course this PR doesn't need to do that, I'm just talking out loud.
@@ -156,6 +156,15 @@ func (self *RebaseCommands) EditRebase(branchRef string) error { | |||
}).Run() | |||
} | |||
|
|||
func (self *RebaseCommands) EditRebaseFromBaseCommit(targetBranchName string, baseCommit string) error { | |||
self.os.LogCommand(fmt.Sprintf("Beginning interactive rebase from '%s' onto '%s", baseCommit, targetBranchName), false) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This needs i18n
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does it? All the existing LogCommand
calls I could find use literal strings.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wow right you are. That's a huge oversight on my part. My rule has been that anything which the user can see within lazygit should be i18n'd. That means that logs that go to the log file (e.g. self.c.Log.Warnf(...)
) don't need to i18n. But LogCommand
and LogAction
do.
Could you i18n this one and then I'll raise an issue for the rest?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Issue: #2848
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'll wait with this until after #2852 is merged, so that I know where to put the new text.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK, I changed my mind. 😄 Since this PR was otherwise ready, I decided to merge it now. @KarlHeitmann, can you please take care of this command too in your #2852 PR? Thanks!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok! I will fix it tonight.
err := self.c.Git().Rebase.RebaseBranch(ref) | ||
return self.CheckMergeOrRebase(err) | ||
baseCommit := self.c.Modes().MarkedBaseCommit.GetSha() | ||
err := lo.Ternary(baseCommit != "", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm 99% sure this isn't working the way you expect: lo.Ternary evaluates both the if and else expressions before picking which one to return (just cos that's how the language works and lo has no way to get around that). So this will unconditionally call both rebase functions.
I believe lo has lo.TernaryFunc which you can use to only evaluate the expression if it's chosen, but at that point I wonder if it's just easier to use an if/else statement.
lo.Ternary should really only be used when it's dealing expressions that evaluate without side effects and without much time/memory footprint.
In this case I'd use an opts object in RebaseBranch
and let it internally deal with the baseCommit arg.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ouch; fixed in c2afab3. I wonder why it worked though, I had used this locally for a while, and the tests are green too.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Beats me. Maybe by some weird quirk of git logic they're mutually idempotent? Or the first one runs to completion because it's evaluated first, and then the second one runs, fails with an error due to the state being different, and the error is ignored?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Almost. What happened: when baseCommit was non-empty, it first did the rebase --onto, then the normal rebase afterwards. The latter succeeded too, but was a no-op, because the branch was already sitting on its target. Conversely, when baseCommit was empty, the first command would fail, and then the second command would run and do its job. Phew.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wow, crazy!
@@ -234,17 +241,23 @@ func (self *MergeAndRebaseHelper) RebaseOntoRef(ref string) error { | |||
Tooltip: self.c.Tr.InteractiveRebaseTooltip, | |||
OnPress: func() error { | |||
self.c.LogAction(self.c.Tr.Actions.RebaseBranch) | |||
err := self.c.Git().Rebase.EditRebase(ref) | |||
baseCommit := self.c.Modes().MarkedBaseCommit.GetSha() | |||
err := lo.Ternary(baseCommit != "", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same as above
return self.c.PushContext(self.c.Contexts().LocalCommits) | ||
}, | ||
}, | ||
} | ||
|
||
title := utils.ResolvePlaceholderString( | ||
self.c.Tr.RebasingTitle, | ||
lo.Ternary(self.c.Modes().MarkedBaseCommit.GetSha() != "", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here's an example where using ternary is harmless
Here's the patch for that btw: diff --git a/pkg/gui/presentation/commits.go b/pkg/gui/presentation/commits.go
index 575b27700..46ae93898 100644
--- a/pkg/gui/presentation/commits.go
+++ b/pkg/gui/presentation/commits.go
@@ -102,6 +102,7 @@ func GetCommitListDisplayStrings(
lines := make([][]string, 0, len(filteredCommits))
var bisectStatus BisectStatus
+ willBeRebased := markedBaseCommit == ""
for i, commit := range filteredCommits {
unfilteredIdx := i + startIdx
bisectStatus = getBisectStatus(unfilteredIdx, commit.Sha, bisectInfo, bisectBounds)
@@ -111,11 +112,15 @@ func GetCommitListDisplayStrings(
showYouAreHereLabel = false
}
isMarkedBaseCommit := commit.Sha != "" && commit.Sha == markedBaseCommit
+ if isMarkedBaseCommit {
+ willBeRebased = true
+ }
lines = append(lines, displayCommit(
common,
commit,
cherryPickedCommitShaSet,
isMarkedBaseCommit,
+ willBeRebased,
diffName,
timeFormat,
shortTimeFormat,
@@ -265,6 +270,7 @@ func displayCommit(
commit *models.Commit,
cherryPickedCommitShaSet *set.Set[string],
isMarkedBaseCommit bool,
+ willBeRebased bool,
diffName string,
timeFormat string,
shortTimeFormat string,
@@ -276,7 +282,7 @@ func displayCommit(
bisectInfo *git_commands.BisectInfo,
isYouAreHereCommit bool,
) []string {
- shaColor := getShaColor(commit, diffName, cherryPickedCommitShaSet, isMarkedBaseCommit, bisectStatus, bisectInfo)
+ shaColor := getShaColor(commit, diffName, cherryPickedCommitShaSet, bisectStatus, bisectInfo)
bisectString := getBisectStatusText(bisectStatus, bisectInfo)
actionString := ""
@@ -310,6 +316,9 @@ func displayCommit(
} else if isMarkedBaseCommit {
rebaseFromHere := style.FgYellow.Sprint(common.Tr.MarkedCommitMarker)
name = fmt.Sprintf("%s %s", rebaseFromHere, name)
+ } else if !willBeRebased {
+ willBeRebased := style.FgYellow.Sprint("✓")
+ name = fmt.Sprintf("%s %s", willBeRebased, name)
}
authorFunc := authors.ShortAuthor
@@ -362,7 +371,6 @@ func getShaColor(
commit *models.Commit,
diffName string,
cherryPickedCommitShaSet *set.Set[string],
- isMarkedBaseCommit bool,
bisectStatus BisectStatus,
bisectInfo *git_commands.BisectInfo,
) style.TextStyle {
@@ -386,12 +394,8 @@ func getShaColor(
default:
}
- if isMarkedBaseCommit {
- shaColor = theme.MarkedBaseCommitTextStyle
- } else if diffed {
+ if diffed {
shaColor = theme.DiffTerminalColor
- } else if cherryPickedCommitShaSet.Includes(commit.Sha) {
- shaColor = theme.CherryPickedCommitTextStyle
}
return shaColor
|
The full command is way too long to show in the menu; it includes options like Personally I also don't feel it's necessary to show the corresponding git command; if we have a good, intuitive visualization, it will be clear enough, or actually even clearer than the command line.
That would be #2206. |
da080dd
to
fba9de8
Compare
Thanks, applied in fba9de8. |
Ah, I actually missed that we were already saying In general though, as a design principle, I don't want to be obscuring the underlying git commands. We received a lot of feedback about lack of understanding about what commands were being run back before we introduced the command log, and since introducing it people have said it's one of the things they like most about lazygit. I actually want to move towards something like magit where you have complete control over what flags are used for each command, though I want to do it in a way where you only invoke that functionality when you want it, so that the typical flows are still efficient. |
One final thing: The |
Makes sense, changed in 305979e. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
We are in the outsideFilterModeBindings section here; all of these handlers are wrapped in a OutsideFilterMode guard in a loop below. No need to add one manually here.
This allows to do the equivalent of "git rebase --onto <target> <base>", by first marking the <base> commit with the new command, and then selecting the target branch and invoking the usual rebase command there.
305979e
to
66de981
Compare
[](https://renovatebot.com) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [GoogleContainerTools/skaffold](https://github.com/GoogleContainerTools/skaffold) | patch | `v2.6.2` -> `v2.6.3` | | [ajeetdsouza/zoxide](https://github.com/ajeetdsouza/zoxide) | patch | `v0.9.1` -> `v0.9.2` | | [aquaproj/aqua-registry](https://github.com/aquaproj/aqua-registry) | patch | `v4.32.0` -> `v4.32.2` | | [jesseduffield/lazygit](https://github.com/jesseduffield/lazygit) | minor | `v0.39.4` -> `v0.40.0` | | [weaveworks/eksctl](https://github.com/weaveworks/eksctl) | minor | `v0.150.0` -> `v0.151.0` | --- ### Release Notes <details> <summary>GoogleContainerTools/skaffold (GoogleContainerTools/skaffold)</summary> ### [`v2.6.3`](https://github.com/GoogleContainerTools/skaffold/releases/tag/v2.6.3): Release [Compare Source](https://github.com/GoogleContainerTools/skaffold/compare/v2.6.2...v2.6.3) ##### v2.6.3 Release - 2023-08-04 **Linux amd64** `curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v2.6.3/skaffold-linux-amd64 && chmod +x skaffold && sudo mv skaffold /usr/local/bin` **Linux arm64** `curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v2.6.3/skaffold-linux-arm64 && chmod +x skaffold && sudo mv skaffold /usr/local/bin` **macOS amd64** `curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v2.6.3/skaffold-darwin-amd64 && chmod +x skaffold && sudo mv skaffold /usr/local/bin` **macOS arm64** `curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v2.6.3/skaffold-darwin-arm64 && chmod +x skaffold && sudo mv skaffold /usr/local/bin` **Windows** https://storage.googleapis.com/skaffold/releases/v2.6.3/skaffold-windows-amd64.exe **Docker image** `gcr.io/k8s-skaffold/skaffold:v2.6.3` **Full Changelog**: GoogleContainerTools/skaffold@v2.6.2...v2.6.3 </details> <details> <summary>ajeetdsouza/zoxide (ajeetdsouza/zoxide)</summary> ### [`v0.9.2`](https://github.com/ajeetdsouza/zoxide/releases/tag/v0.9.2): 0.9.2 [Compare Source](https://github.com/ajeetdsouza/zoxide/compare/v0.9.1...v0.9.2) ##### Added - Short option `-a` for `zoxide query --all`. ##### Fixed - PowerShell: use `global` scope for variables / functions. </details> <details> <summary>aquaproj/aqua-registry (aquaproj/aqua-registry)</summary> ### [`v4.32.2`](https://github.com/aquaproj/aqua-registry/releases/tag/v4.32.2) [Compare Source](https://github.com/aquaproj/aqua-registry/compare/v4.32.1...v4.32.2) [Issues](https://github.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.32.2) | [Pull Requests](https://github.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.32.2) | aquaproj/aqua-registry@v4.32.1...v4.32.2 ##### Fixes [#​14327](https://github.com/aquaproj/aqua-registry/issues/14327) Rename kyleconroy/sqlc to sqlc-dev/sqlc as of repository migration [@​ichizero](https://github.com/ichizero) [#​14339](https://github.com/aquaproj/aqua-registry/issues/14339) sqlc-dev/sqlc: Support old versions ### [`v4.32.1`](https://github.com/aquaproj/aqua-registry/releases/tag/v4.32.1) [Compare Source](https://github.com/aquaproj/aqua-registry/compare/v4.32.0...v4.32.1) [Issues](https://github.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.32.1) | [Pull Requests](https://github.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.32.1) | aquaproj/aqua-registry@v4.32.0...v4.32.1 #### Fixes [#​14275](https://github.com/aquaproj/aqua-registry/issues/14275) [#​14276](https://github.com/aquaproj/aqua-registry/issues/14276) [#​14277](https://github.com/aquaproj/aqua-registry/issues/14277) [#​14278](https://github.com/aquaproj/aqua-registry/issues/14278) [domoritz/arrow-tools/{csv2arrow,csv2parquet,json2arrow,json2parquet}](https://github.com/domoritz/arrow-tools): Follow up changes of asset names </details> <details> <summary>jesseduffield/lazygit (jesseduffield/lazygit)</summary> ### [`v0.40.0`](https://github.com/jesseduffield/lazygit/releases/tag/v0.40.0) [Compare Source](https://github.com/jesseduffield/lazygit/compare/v0.39.4...v0.40.0) <!-- Release notes generated using configuration in .github/release.yml at 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](https://jesseduffield.com/Lazygit-5-Years-On). 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](https://github.com/jesseduffield) (with help from [@​kadaan](https://github.com/kadaan)) in [https://github.com/jesseduffield/lazygit/pull/2147](https://github.com/jesseduffield/lazygit/pull/2147) - Rebase onto branch from a marked base commit by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2835](https://github.com/jesseduffield/lazygit/pull/2835) - Auto-refresh on window activation by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2854](https://github.com/jesseduffield/lazygit/pull/2854) ##### Enhancements 🔥 - Faster refresh by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2841](https://github.com/jesseduffield/lazygit/pull/2841) - feat: add os.copyToClipboardCmd to allow for a custom command [#​1055](https://github.com/jesseduffield/lazygit/issues/1055) by [@​redstreet](https://github.com/redstreet) in [https://github.com/jesseduffield/lazygit/pull/2784](https://github.com/jesseduffield/lazygit/pull/2784) - Add bisect menu entry that lets you choose bisect terms by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2838](https://github.com/jesseduffield/lazygit/pull/2838) - When bisecting, always mark the current commit as good/bad, not the selected by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2837](https://github.com/jesseduffield/lazygit/pull/2837) - Visualize local branch heads in commits panel, 2nd approach by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2775](https://github.com/jesseduffield/lazygit/pull/2775) - Allow force-tagging if tag exists by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2827](https://github.com/jesseduffield/lazygit/pull/2827) - Save IgnoreWhitespaceInDiffView in state.yml by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2830](https://github.com/jesseduffield/lazygit/pull/2830) - Show loader when rebasing by [@​KarlHeitmann](https://github.com/KarlHeitmann) in [https://github.com/jesseduffield/lazygit/pull/2851](https://github.com/jesseduffield/lazygit/pull/2851) - Internationalise logging of commands by [@​KarlHeitmann](https://github.com/KarlHeitmann) in [https://github.com/jesseduffield/lazygit/pull/2852](https://github.com/jesseduffield/lazygit/pull/2852) - Show visual explosion effect when nuking worktree by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2861](https://github.com/jesseduffield/lazygit/pull/2861) ##### Fixes 🔧 - Fix issue where using `null` to un-map a keybinding was ignored by [@​hatredholder](https://github.com/hatredholder) in [https://github.com/jesseduffield/lazygit/pull/2832](https://github.com/jesseduffield/lazygit/pull/2832) - Show error when trying to open patch menu with an empty patch by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2829](https://github.com/jesseduffield/lazygit/pull/2829) - Fix merge status for update-ref command by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2845](https://github.com/jesseduffield/lazygit/pull/2845) - Stop worktrees view from stealing the window by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2863](https://github.com/jesseduffield/lazygit/pull/2863) - Fix confirmation view sizing by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2879](https://github.com/jesseduffield/lazygit/pull/2879) ##### Maintenance ⚙️ - Standardise on using lo for slice functions by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2846](https://github.com/jesseduffield/lazygit/pull/2846) - Remove redundant secureexec package by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2847](https://github.com/jesseduffield/lazygit/pull/2847) - Add automated demo recordings by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2853](https://github.com/jesseduffield/lazygit/pull/2853) - Remove file watcher code by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2865](https://github.com/jesseduffield/lazygit/pull/2865) - Add more demos to the README by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2866](https://github.com/jesseduffield/lazygit/pull/2866) - Move features to top of readme by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2867](https://github.com/jesseduffield/lazygit/pull/2867) - Add more demos by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2874](https://github.com/jesseduffield/lazygit/pull/2874) ##### Other Changes - Create demo output dir if it doesn't already exist by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2857](https://github.com/jesseduffield/lazygit/pull/2857) #### New Contributors - [@​hatredholder](https://github.com/hatredholder) made their first contribution in [https://github.com/jesseduffield/lazygit/pull/2832](https://github.com/jesseduffield/lazygit/pull/2832) - [@​redstreet](https://github.com/redstreet) made their first contribution in [https://github.com/jesseduffield/lazygit/pull/2784](https://github.com/jesseduffield/lazygit/pull/2784) - [@​kadaan](https://github.com/kadaan) made their first contribution in [https://github.com/jesseduffield/lazygit/pull/2147](https://github.com/jesseduffield/lazygit/pull/2147) - [@​KarlHeitmann](https://github.com/KarlHeitmann) made their first contribution in [https://github.com/jesseduffield/lazygit/pull/2851](https://github.com/jesseduffield/lazygit/pull/2851) **Full Changelog**: jesseduffield/lazygit@v0.39.4...v0.40.0 </details> <details> <summary>weaveworks/eksctl (weaveworks/eksctl)</summary> ### [`v0.151.0`](https://github.com/eksctl-io/eksctl/releases/tag/v0.151.0): eksctl 0.151.0 (permalink) [Compare Source](https://github.com/weaveworks/eksctl/compare/0.150.0...0.151.0) ### Release v0.151.0 #### 🚀 Features - Support custom AMIs for self-managed Windows nodegroups ([#​6804](https://github.com/weaveworks/eksctl/issues/6804)) - Support custom Ubuntu AMIs for EKS-managed nodegroups ([#​6850](https://github.com/weaveworks/eksctl/issues/6850)) #### 🎯 Improvements - Remove support for EKS 1.22 ([#​6704](https://github.com/weaveworks/eksctl/issues/6704)) #### 🐛 Bug Fixes - Fix error with tar in `Post Cache go-build and mod` step ([#​6840](https://github.com/weaveworks/eksctl/issues/6840)) - Fix setting link-time variables for release version ([#​6841](https://github.com/weaveworks/eksctl/issues/6841)) - Select one subnet for AZs where multiple are present and no VPC config provided ([#​6814](https://github.com/weaveworks/eksctl/issues/6814)) - Paginate instance type offerings response ([#​6832](https://github.com/weaveworks/eksctl/issues/6832)) #### 🧰 Maintenance - Bump dependencies ([#​6852](https://github.com/weaveworks/eksctl/issues/6852), [#​6859](https://github.com/weaveworks/eksctl/issues/6859)) - Cleanup Flux Integration ([#​6836](https://github.com/weaveworks/eksctl/issues/6836)) #### Acknowledgments Weaveworks would like to sincerely thank: [@​watany-dev](https://github.com/watany-dev) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 4pm on thursday" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/scottames/dots). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi4yNy4xIiwidXBkYXRlZEluVmVyIjoiMzYuMjcuMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Introduce a new command (shift-B by default) to mark the base commit for the next rebase. After that, invoking a rebase in the branches panel rebases from that base commit, effectively performing a
git rebase --onto <selected-branch> <marked-base>
.Addresses #987.
go run scripts/cheatsheet/main.go generate
)docs/Config.md
) have been updated if necessary