Skip to content

Conversation

@stefanhaller
Copy link
Collaborator

@stefanhaller stefanhaller commented Aug 3, 2023

  • PR Description

This adds a new command to the "upstream" menu (available by pressing u in the branches panel) that lets you see what git calls the "symmetric difference" of a branch against its upstream. I find this useful in two situations:

  • when a branch has diverged from its upstream (i.e. it shows mybranch ↑3↓5) it allows you to tell whether this is because you and your coworker have both added commits (in which case you want to pull), or because you rebased the branch locally, in which case you want to force-push. Or both, in which case you want to maybe cherry-pick the upstream commit (which is easy from this new view), and then force-push.

  • when master has new commits (i.e. it shows master ↓7), this lets you see which commits you would fetch before actually doing it.

  • Please check if the PR fulfills these requirements

  • Cheatsheets are up-to-date (run go run scripts/cheatsheet/main.go generate)
  • Code has been formatted (see here)
  • Tests have been added/updated (see here for the integration test guide)
  • Text is internationalised (see here)
  • Docs (specifically docs/Config.md) have been updated if necessary
  • You've read through your own file changes for silly mistakes etc

@jesseduffield
Copy link
Owner

This is a sorely missing feature right now. I'm in a similar spot with the rebase-onto PR where there's a tension between a unified UX and a tailored UX. On one side I'd like a unified UX for diffing, but the overwhelming majority of symmetric diffing is between a branch and its upstream, so I think having a bespoke UI for that makes sense.

I agree about the keyboard awkwardness. How about adding an entry to the 'upstream' menu (invoked with 'u'). I think that would be a good place for something like this.

With those up arrows: I think we also should include them in the regular view, but in the place of the existing commit icon. That way it'll be clear what they represent when you're going between the views (and it'll also clear up confusion for those who don't get the meaning of red commit hashes in the first place).

It would be good if there was some easy way to look at a summary of the file changes rather than having to go commit-by-commit. VSCode has it as the first entry in a list of commits:

image

It would also be good to have headers for the two sets of changes i.e. 'changes to pull' and 'changes to push'. It would also be good if you could collapse those headers to easily get from the set of commits you care about (not super important here because if all you cared about was the commits to push you could look at them in the regular commits view). At any rate, there's no real precedent for having items in these views that represent something completely different from the other things, and I don't think it's a good pattern to add a new field in the commits model called 'IsHeader': it's something that should happen at the view-model/view level rather than the model level. But this is all just wishlist stuff: If we can get this PR across the line with the existing UI patterns in place then that's good enough for me.

FWIW I haven't read the code yet

Description: self.c.Tr.ViewCommits,
},
{
Handler: self.viewLeftRightCommits,
Copy link
Owner

@jesseduffield jesseduffield Aug 3, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This controller is attached to a few contexts:

		gui.State.Contexts.Branches,
		gui.State.Contexts.RemoteBranches,
		gui.State.Contexts.Tags,
		gui.State.Contexts.ReflogCommits,

But we only want this keybinding for branches right?

Might need to create a 'switch_to_subcommits_helper' which is a reflection of a poor architecture here: often controller code needs to be used from somewhere else and the only solution is to extract that code out into a helper.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right. In the implementation we check whether the model is a models.Branch and only do the left-right thing in that case, falling back to the normal log if not. We also fall back to normal log if the branch has no upstream, so we need those if statements anyway.

@stefanhaller
Copy link
Collaborator Author

I agree about the keyboard awkwardness. How about adding an entry to the 'upstream' menu (invoked with 'u').

Good idea, that might work. (Except that I really use this command so often that I would prefer it to be a single-key shortcut. But I could try if I can get used to it.)

What would you call it?

With those up arrows: I think we also should include them in the regular view, but in the place of the existing commit icon. That way it'll be clear what they represent when you're going between the views (and it'll also clear up confusion for those who don't get the meaning of red commit hashes in the first place).

I disagree; the red/yellow colors in this new left-right view mean something very different from the red/yellow in the normal view, so I think it would be very confusing to add arrows in the normal view and make it look like they mean something similar.

It would be good if there was some easy way to look at a summary of the file changes rather than having to go commit-by-commit.

I would see this as an orthogonal feature. Right now I do this by going to the first commit of the branch (or one below), typing W, and moving to the head commit. It would be nice if there was an easier way to do this, but I see this as independent from the left/right log.

It would also be good to have headers for the two sets of changes i.e. 'changes to pull' and 'changes to push'. It would also be good if you could collapse those headers to easily get from the set of commits you care about

This is tricky because the red/yellow commits can be intermingled depending on log order. Which is arguably confusing when it happens, so we might sort the commits by type. Anyway, I don't miss those headers myself.

@stefanhaller
Copy link
Collaborator Author

the red/yellow colors in this new left-right view mean something very different from the red/yellow in the normal view,

So maybe we should use entirely different colors for the left-right view to avoid this confusion. Maybe magenta for outgoing, and blue for incoming? (Trying this in a fixup.)

This is tricky because the red/yellow commits can be intermingled depending on log order. Which is arguably confusing when it happens, so we might sort the commits by type.

This only happened to me because I had git.log.order: "default" in my config. (I don't remember why, I don't like that. 😄) With the default of topo-order they never appear intermingled, so maybe we should use that explicitly in this view, overriding the config. However, the order of incoming vs. outgoing commits is still not deterministic, it depends on the commit dates. I wonder if it would be easier to understand if incoming commits would always come first.

Added a fixup to sort incoming commits before outgoing ones, this helps a lot, I find.

@stefanhaller stefanhaller force-pushed the symmetric-difference-against-upstream branch from 4bfd8b9 to 002917c Compare August 4, 2023 12:19
@stefanhaller
Copy link
Collaborator Author

OK, as for the arrows and the colors: I was a bit slow here, I get it now. We should show the up arrow for red commits in the normal view too (only for those), and make the outgoing commits in the left-right view red as well. We then only need a different color for the incoming commits, I picked blue for now.

This also simplifies the implementation a bit, because we can make the incoming state just another models.Status, so we don't need an extra model field for the left/right thing and lots of special cases around it.

The only things that's a bit confusing now is when you rebase your local branch onto a newer master, which I just did with this branch. In that case, some of the commits that are shown in green in the normal commits view are shown in red in the left-right view, which is confusing. But I don't want to show them in green in the left-right view (I think).

image

I also added a commit that moves the command to the upstream menu as you suggested. If we make it the first entry so that you can hit u <enter>, that would work for me.

@jesseduffield
Copy link
Owner

The only things that's a bit confusing now is when you rebase your local branch onto a newer master, which I just did with this branch. In that case, some of the commits that are shown in green in the normal commits view are shown in red in the left-right view, which is confusing. But I don't want to show them in green in the left-right view (I think).

I agree they should just appear as red in the left-right view. It would be cool if we could show the up arrow in the local commits view against commits that are both merged-to-master and unpushed. That would require splitting out pushed status (or merged status) from the commit's Status field. Up to you if you think that's worth doing here.

@jesseduffield jesseduffield added the feature For large enhancements that add a new chunk of functionality label Aug 5, 2023
Copy link
Owner

@jesseduffield jesseduffield left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking really good, left some comments

@stefanhaller
Copy link
Collaborator Author

I'm still struggling with the concepts here, and what's the best way to visualize them.

Arrows: they really mean different things in the normal commits view and the left-right view, and I'm no longer sure if I would show them in the normal view for that reason. In the left-right view, they just mark the "mine vs. theirs" distinction, this has nothing to do with local vs. remote. In the normal view they would mark commits that the remote doesn't have yet, which is something very different. As for the suggestion to show arrows for green commits if they are both merged and unpushed: I bet people would find this confusing and would ask what that means.

Colors: I think I changed my mind about showing green for master commits in the left/right view. It would actually be very useful to be able to tell where a branch starts if it has been rebased. Here's an example of a branch that was rebased locally onto a newer master:
image
In this contrived case you can easily tell from the commit subjects where the branch starts, but in the real world it might not be so easy.

On the other hand, using just two colors for "mine vs. theirs" helps make the two sections more clear, as in the image above; the arrows alone are not distinct enough for that purpose. So if we lose this clear color coding, we might really need the section headers that you suggested earlier. I'm just not keen on going that route because it seems like so much work.

So, unsure what to do. Currently I lean towards:

  • not show arrows in normal view
  • show red/blue/green colors in left-right view, and see if that's good enough without section headers.

@stefanhaller stefanhaller force-pushed the symmetric-difference-against-upstream branch from 002917c to 1b9ad54 Compare August 5, 2023 10:36
@stefanhaller
Copy link
Collaborator Author

So, I changed it in that way. Which means we're back to the previous implementation with an extra field in the model (an enum this time instead of a string). I'm pretty happy with this now.

Here's what it looked like for this very branch right before I force-pushed:
image

I still think adding section headers would make it clearer, but I'd be ok with going without them for now.

@stefanhaller stefanhaller changed the title Show symmetric difference against upstream on alt-enter Add command to show divergence from upstream Aug 5, 2023
@jesseduffield
Copy link
Owner

I agree with that UX. I also would like headers there but happy to merge without them. I'll take another look at the code now

@jesseduffield
Copy link
Owner

Actually one thing that would be good is to add the 'view divergence from upstream' menu item to the diffing menu as well (shift+w). Users may think to look for the option in the upstream menu or the diffing menu and I think we should support both angles.

Copy link
Owner

@jesseduffield jesseduffield left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Patch here based on tweaking things locally which does a view things:

  • removes the need for a type assertion
  • explicitly checks if the upstream is tracked locally
diff --git a/pkg/commands/models/branch.go b/pkg/commands/models/branch.go
index b4dcc0a79..5b49fcdc7 100644
--- a/pkg/commands/models/branch.go
+++ b/pkg/commands/models/branch.go
@@ -1,5 +1,7 @@
 package models
 
+import "fmt"
+
 // Branch : A git branch
 // duplicating this for now
 type Branch struct {
@@ -43,6 +45,14 @@ func (b *Branch) ParentRefName() string {
 	return b.RefName() + "^"
 }
 
+func (b *Branch) FullUpstreamRefName() string {
+	if b.UpstreamRemote == "" || b.UpstreamBranch == "" {
+		return ""
+	}
+
+	return fmt.Sprintf("refs/remotes/%s/%s", b.UpstreamRemote, b.UpstreamBranch)
+}
+
 func (b *Branch) ID() string {
 	return b.RefName()
 }
diff --git a/pkg/gui/controllers/branches_controller.go b/pkg/gui/controllers/branches_controller.go
index 7f0a0f9fb..24139fa09 100644
--- a/pkg/gui/controllers/branches_controller.go
+++ b/pkg/gui/controllers/branches_controller.go
@@ -144,20 +144,15 @@ func (self *BranchesController) setUpstream(selectedBranch *models.Branch) error
 			{
 				LabelColumns: []string{self.c.Tr.ViewDivergenceFromUpstream},
 				OnPress: func() error {
-					ref := self.context().GetSelectedRef()
-					if ref == nil {
+					branch := self.context().GetSelected()
+					if branch == nil {
 						return nil
 					}
 
-					upstreamRefName := ""
-					if branch, ok := ref.(*models.Branch); ok {
-						if branch.UpstreamRemote != "" && branch.UpstreamBranch != "" {
-							upstreamRefName = fmt.Sprintf("refs/remotes/%s/%s", branch.UpstreamRemote, branch.UpstreamBranch)
-						} else {
-							return self.c.ErrorMsg(self.c.Tr.DivergenceNoUpstream)
-						}
+					if !branch.RemoteBranchStoredLocally() {
+						return self.c.ErrorMsg(self.c.Tr.DivergenceNoUpstream)
 					}
-					return self.c.Helpers().SubCommits.ViewSubCommits(ref, upstreamRefName, self.context(), false)
+					return self.c.Helpers().SubCommits.ViewSubCommits(branch, branch.FullUpstreamRefName(), self.context(), false)
 				},
 				Key: 'v',
 			},
diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go
index 072e5b44b..bfa9e3ed6 100644
--- a/pkg/i18n/english.go
+++ b/pkg/i18n/english.go
@@ -1123,7 +1123,7 @@ func EnglishTranslationSet() TranslationSet {
 		SetUpstream:                         "Set upstream of selected branch",
 		UnsetUpstream:                       "Unset upstream of selected branch",
 		ViewDivergenceFromUpstream:          "View divergence from upstream",
-		DivergenceNoUpstream:                "Cannot show divergence of a branch that has no upstream",
+		DivergenceNoUpstream:                "Cannot show divergence of a branch that has no (locally tracked) upstream",
 		SetUpstreamTitle:                    "Set upstream branch",
 		SetUpstreamMessage:                  "Are you sure you want to set the upstream branch of '{{.checkedOut}}' to '{{.selected}}'",
 		EditRemote:                          "Edit remote",


const (
DivergenceNone Divergence = iota
DivergenceLocal
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we rename these to 'DivergenceAhead' and 'DivergenceBehind' to generalise for the sake of diffing any two refs?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Personally I don't like the terms "ahead" and "behind" much, they are not an intuitive description of what's happening. For example, for a branch that my co-worker rebased onto a newer master, my divergence view shows my older branch commits as "ahead", but the upstream commits (which are really "newer") as "behind". I don't find this intuitive at all.

I find terms like "local/remote" (or "local/upstream") or "mine/theirs" more useful to describe the situation.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is still unresolved; which one should I pick?

  1. DivergenceLocal/DivergenceUpstream (the current version)
  2. DivergenceBehind/DivergenceAhead (your preference)
  3. DivergenceMine/DivergenceTheirs
  4. DivergenceLocal/DivergenceRemote

I can live with each of these, but my preference is either 3 or 4.

(We should make these names the same as what we show in the section headers.)

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, forgot to respond.

It's gonna have to be either 2 or 3 because we could be comparing any two refs. Ahead/Behind is used in vscode when it shows divergence, so there's precedence for it. The downside is that it invokes time.

Mine/Theirs is intuitive when comparing your branch to somebody else's branch, but it's confusing when you own both branches. It invokes interpersonal comparison

ChatGPT just suggested source/target. That sounds pretty neutral to me, what do you think?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BTW as for labels: I'm happy to have the labels be something like 'Commits unique to A', and 'Commits unique to B' where we don't need to use the same terminology we're using here.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

source/target sounds too neutral to me, I find it hard to relate the terms to the feature.

I agree that 'Commits unique to A' (or maybe just 'A') makes sense when we allow comparing any two refs. We don't have that feature yet, and for the specific case of comparing against upstream I prefer Local/Remote. Can we make this configurable (later, when we need it) and show Local/Remote in the headers for now?

In that case, what we use for the variable names doesn't matter too much to me. Maybe DivergenceThis/DivergenceOther. Or even DivergenceLeft/DivergenceRight?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For sure: when comparing to upstream we can have specific headers for that.

Happy to go with DivergenceLeft/DivergenceRight as it aligns with the flag that we're passing to git log.

ActionConflict = todo.Comment + 1
)

type Divergence int
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd add a comment explaining that this is only set when comparing refs

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added one in 8d163ca.

subCommitsContext.SetSelectedLineIdx(0)
subCommitsContext.SetParentContext(context)
subCommitsContext.SetWindowName(context.GetWindowName())
subCommitsContext.SetTitleRef(ref.Description())
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd have this title passed in as an argument so we can say 'mybranch vs origin/mybranch'

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed in 56531a8. I went with mybranch <-> origin/mybranch instead of "vs", thinking that it will be easier to translate (in German we don't have a word for "vs" that is as short).

}
}

func (self *SubCommitsHelper) ViewSubCommits(ref types.Ref, refForSymmetricDifference string, context types.Context, showBranchHeads bool) error {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd make this an opts struct rather than use positional args given that it's getting long

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed in e2acae1.

@stefanhaller
Copy link
Collaborator Author

Actually one thing that would be good is to add the 'view divergence from upstream' menu item to the diffing menu as well (shift+w). Users may think to look for the option in the upstream menu or the diffing menu and I think we should support both angles.

Note sure I agree; as explained elsewhere, I see diffing and viewing left/right logs as very different concepts, and I'm not sure it's good to blur the line between them. That's not a very strong opinion though, happy to put it in if you really want.

@stefanhaller
Copy link
Collaborator Author

I changed my mind about the section headers. In the beginning we had only two colors, for local/remote, and I didn't think the headers were necessary then. But now we have three colors in total (remote can be blue/green, or local can be red/green), and this additional color coding is way more useful than I thought, but now I do think the headers are needed to make it clear enough.

Unfortunately it's trickier than I thought for two reasons:

  • The current mechanism for providing section headers using the getNonModelItems func doesn't work for the refreshViewportOnChange case, i.e. when getDisplayStrings is called with a startIdx and length that's not the entire model. The reason is that getDisplayStrings expects these to be model indices, however we really want to provide view indices there, so we need to convert from view to model, but we need to call getNonModelItems before so that we can do that. However, it currently takes the column positions, which we only have after calling getNonModelItems. The solution is to split getNonModelItems in two, one for getting the positions, and one for rendering the headers. This needs a pretty heavy rework of what was done in Section headers in keybindings menu #2911, and I think I want to do it in that PR so that it's right from the start.
  • The graph needs to be rendered in two separate sections. Without a section header I thought it's acceptable to render it in one piece, resulting in two separate unconnected branches of the graph; but with a header in between this looks too ugly. I haven't looked into how hard this is going to be; hopefully not too bad, but all this means it's going to take a bit longer. Will work more on this next week.

@jesseduffield
Copy link
Owner

Note sure I agree; as explained elsewhere, I see diffing and viewing left/right logs as very different concepts, and I'm not sure it's good to blur the line between them. That's not a very strong opinion though, happy to put it in if you really want.

Happy to leave that out of this PR

@stefanhaller stefanhaller force-pushed the symmetric-difference-against-upstream branch from 1b9ad54 to ee275df Compare August 21, 2023 15:16
@stefanhaller stefanhaller changed the base branch from master to section-headers-in-keybindings-menu August 21, 2023 15:16
@stefanhaller
Copy link
Collaborator Author

New version here, too. This now sits on top of #2911.

}
result = append(result, &NonModelItem{
Index: upstreamIdx,
ClientData: fmt.Sprintf("--- %s ---", c.Tr.DivergenceSectionHeaderRemote),
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Happy to take suggestions for a better UI, for now I went with the simplest possible design. I wasn't sure if we want to align this with the sha column or maybe the subject column.

shouldShowGraph(c),
// Don't show the graph in the left/right view; we'd like to, but
// it's too complicated:
shouldShowGraph(c) && viewModel.GetRefToShowDivergenceFrom() == "",
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is really too bad; I'd like to have the graph in the left/right view, too. But I tried, and it's too hard to do; not only would we have to render the graph in two sections, but we'd actually have to calculate two separate sets of pipe sets; and then there's this global cache for these. I'll leave this as a future improvement.

@stefanhaller stefanhaller force-pushed the section-headers-in-keybindings-menu branch from feb3649 to a730d39 Compare August 28, 2023 12:45
@stefanhaller stefanhaller force-pushed the symmetric-difference-against-upstream branch 2 times, most recently from 0111dbd to f0063c7 Compare August 28, 2023 12:53
Copy link
Owner

@jesseduffield jesseduffield left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Really looking forward to using this myself

@stefanhaller stefanhaller force-pushed the section-headers-in-keybindings-menu branch from 07aa786 to 94bf279 Compare August 29, 2023 06:05
Base automatically changed from section-headers-in-keybindings-menu to master August 29, 2023 06:14
Since the slice stores pointers to objects, and we're only modifying the objects
but not the slice itself, there's no need to return it and assign it back. This
will allow us to call the function for subslices of commits.

Also, move the condition that checks for an empty string inside the function;
we're going to call it from more than one place, so this makes it easier.
It implemented this because it wants to do custom truncation of the ref name;
however, we can achieve the same thing by passing the truncated ref name to our
DynamicTitleBuilder, which was previously unused.
We want to use it from BranchesController too.
@stefanhaller stefanhaller force-pushed the symmetric-difference-against-upstream branch from f0063c7 to df38e95 Compare August 29, 2023 06:20
@stefanhaller stefanhaller merged commit a63d589 into master Aug 29, 2023
@stefanhaller stefanhaller deleted the symmetric-difference-against-upstream branch August 29, 2023 06:22
renovate bot referenced this pull request in scottames/dots Mar 26, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [aquaproj/aqua-registry](https://togithub.com/aquaproj/aqua-registry)
| minor | `v4.154.0` -> `v4.155.1` |
| [cli/cli](https://togithub.com/cli/cli) | minor | `v2.45.0` ->
`v2.46.0` |
| [derailed/k9s](https://togithub.com/derailed/k9s) | patch | `v0.32.3`
-> `v0.32.4` |
| [eza-community/eza](https://togithub.com/eza-community/eza) | patch |
`v0.18.7` -> `v0.18.8` |
| [golangci/golangci-lint](https://togithub.com/golangci/golangci-lint)
| minor | `v1.56.2` -> `v1.57.1` |
|
[gruntwork-io/terragrunt](https://togithub.com/gruntwork-io/terragrunt)
| patch | `v0.55.16` -> `v0.55.20` |
| [jesseduffield/lazygit](https://togithub.com/jesseduffield/lazygit) |
minor | `v0.40.2` -> `v0.41.0` |
| [junegunn/fzf](https://togithub.com/junegunn/fzf) | patch | `0.48.0`
-> `0.48.1` |
| [lsd-rs/lsd](https://togithub.com/lsd-rs/lsd) | minor | `v1.0.0` ->
`v1.1.2` |
| [mikefarah/yq](https://togithub.com/mikefarah/yq) | minor | `v4.42.1`
-> `v4.43.1` |
| [simulot/immich-go](https://togithub.com/simulot/immich-go) | minor |
`0.12.0` -> `0.13.0` |
| [snyk/cli](https://togithub.com/snyk/cli) | minor | `v1.1284.0` ->
`v1.1286.0` |
| [starship/starship](https://togithub.com/starship/starship) | minor |
`v1.17.1` -> `v1.18.1` |
| [twpayne/chezmoi](https://togithub.com/twpayne/chezmoi) | patch |
`v2.47.1` -> `v2.47.2` |
| [weaveworks/eksctl](https://togithub.com/weaveworks/eksctl) | minor |
`v0.174.0` -> `v0.175.0` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>aquaproj/aqua-registry (aquaproj/aqua-registry)</summary>

###
[`v4.155.1`](https://togithub.com/aquaproj/aqua-registry/releases/tag/v4.155.1)

[Compare
Source](https://togithub.com/aquaproj/aqua-registry/compare/v4.155.0...v4.155.1)


[Issues](https://togithub.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.155.0)
| [Pull
Requests](https://togithub.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.155.0)
| https://github.com/aquaproj/aqua-registry/compare/v4.155.0...v4.155.1

##### Others


[#&#8203;21239](https://togithub.com/aquaproj/aqua-registry/issues/21239)
Rename the package crates.io/shellharden to anordal/shellharden
[@&#8203;hituzi-no-sippo](https://togithub.com/hituzi-no-sippo)

shellharden started releasing pre-built binaries, so we changed the
package type from `cargo` to `github_release` from shellharden v4.3.1.


[https://github.com/anordal/shellharden/pull/57](https://togithub.com/anordal/shellharden/pull/57)
https://github.com/anordal/shellharden/releases/tag/v4.3.1

> \[!WARNING]
> Please rename the package `crates.io/shellharden` to
`anordal/shellharden`
>
> ```yaml
> packages:
> - name: anordal/shellharden@v4.3.1
> ```
>
> Note that Renovate will update crates.io/shellharden to
crates.io/shellharden@4.3.1, but it wouldn't work.
> You have to change the version to `v4.3.1`.

###
[`v4.155.0`](https://togithub.com/aquaproj/aqua-registry/releases/tag/v4.155.0)

[Compare
Source](https://togithub.com/aquaproj/aqua-registry/compare/v4.154.0...v4.155.0)


[Issues](https://togithub.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.154.0)
| [Pull
Requests](https://togithub.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.154.0)
| https://github.com/aquaproj/aqua-registry/compare/v4.154.0...v4.155.0

#### 🎉 New Packages


[#&#8203;21127](https://togithub.com/aquaproj/aqua-registry/issues/21127)
[ynqa/jnv](https://togithub.com/ynqa/jnv): interactive JSON filter using
jq [@&#8203;ponkio-o](https://togithub.com/ponkio-o)

[#&#8203;21079](https://togithub.com/aquaproj/aqua-registry/issues/21079)
[zaghaghi/openapi-tui](https://togithub.com/zaghaghi/openapi-tui):
Terminal UI to list, browse and run APIs defined with openapi spec
[@&#8203;wancup](https://togithub.com/wancup)

#### Fixes


[#&#8203;21122](https://togithub.com/aquaproj/aqua-registry/issues/21122)
Update some packages to support Cosign v2

⚠️ To install the following packages, aqua v2.25.1 or later is required.

-   aquaproj/aqua-registry-updater
-   aquaproj/registry-tool
-   argoproj/argo-workflows
-   chainguard-dev/apko
-   chainguard-dev/melange
-   charmbracelet/gum
-   goreleaser/nfpm
-   kubernetes-sigs/zeitgeist
-   lintnet/lintnet
-   suzuki-shunsuke/ci-info
-   suzuki-shunsuke/circleci-config-merge
-   suzuki-shunsuke/cmdx
-   suzuki-shunsuke/ghalint
-   suzuki-shunsuke/ghcp
-   suzuki-shunsuke/github-comment
-   suzuki-shunsuke/mkghtag
-   suzuki-shunsuke/nllint
-   suzuki-shunsuke/pinact
-   suzuki-shunsuke/renovate-issue-action
-   suzuki-shunsuke/tfcmt
-   suzuki-shunsuke/tfprovidercheck
-   terraform-linters/tflint
-   tfmigrator/cli
-   updatecli/updatecli
-   yuyaban/gitlab-comment


[#&#8203;21062](https://togithub.com/aquaproj/aqua-registry/issues/21062)
[#&#8203;21063](https://togithub.com/aquaproj/aqua-registry/issues/21063)
[#&#8203;21064](https://togithub.com/aquaproj/aqua-registry/issues/21064)
[#&#8203;21065](https://togithub.com/aquaproj/aqua-registry/issues/21065)
[#&#8203;21066](https://togithub.com/aquaproj/aqua-registry/issues/21066)
Transfer [k0kubun/xremap/\*](https://togithub.com/k0kubun/xremap) to
[xremap/xremap/\*](https://togithub.com/xremap/xremap)

The GitHub Repository of the package "k0kubun/xremap/hypr" was
transferred from [k0kubun/xremap](https://togithub.com/k0kubun/xremap)
to [xremap/xremap](https://togithub.com/xremap/xremap)

</details>

<details>
<summary>cli/cli (cli/cli)</summary>

### [`v2.46.0`](https://togithub.com/cli/cli/releases/tag/v2.46.0):
GitHub CLI 2.46.0

[Compare Source](https://togithub.com/cli/cli/compare/v2.45.0...v2.46.0)

#### What's Changed

- Draft issue IDs are included in `project item-list` output by
[@&#8203;yasunori0418](https://togithub.com/yasunori0418) in
[https://github.com/cli/cli/pull/8754](https://togithub.com/cli/cli/pull/8754)
- New `--dry-run` option for `pr create` by
[@&#8203;v1v](https://togithub.com/v1v) in
[https://github.com/cli/cli/pull/8376](https://togithub.com/cli/cli/pull/8376)
- Bump go-keyring to fix race condition by
[@&#8203;williammartin](https://togithub.com/williammartin) in
[https://github.com/cli/cli/pull/8833](https://togithub.com/cli/cli/pull/8833)
- PR numbers are prefixed with owner/repo for context by
[@&#8203;nobe4](https://togithub.com/nobe4) in
[https://github.com/cli/cli/pull/8778](https://togithub.com/cli/cli/pull/8778)
- Extra word removed in `codespaces` code comments by
[@&#8203;cuinix](https://togithub.com/cuinix) in
[https://github.com/cli/cli/pull/8795](https://togithub.com/cli/cli/pull/8795)
- Clarified description of the `-u`, `--user` option for `gh auth token`
by [@&#8203;gregsmi](https://togithub.com/gregsmi) in
[https://github.com/cli/cli/pull/8797](https://togithub.com/cli/cli/pull/8797)
- Fixed formatting for the description of `release upload` by
[@&#8203;malor](https://togithub.com/malor) in
[https://github.com/cli/cli/pull/8834](https://togithub.com/cli/cli/pull/8834)
- Clarified the usage of `auth status` to list all authenticated
accounts by [@&#8203;jsoref](https://togithub.com/jsoref) in
[https://github.com/cli/cli/pull/8838](https://togithub.com/cli/cli/pull/8838)
- Document auth switch behavior for two or more accounts by
[@&#8203;williammartin](https://togithub.com/williammartin) in
[https://github.com/cli/cli/pull/8839](https://togithub.com/cli/cli/pull/8839)
- Document run watch and view not supporting fine grained PATs by
[@&#8203;williammartin](https://togithub.com/williammartin) in
[https://github.com/cli/cli/pull/8843](https://togithub.com/cli/cli/pull/8843)
- build(deps): bump google.golang.org/protobuf from 1.30.0 to 1.33.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/cli/cli/pull/8811](https://togithub.com/cli/cli/pull/8811)
- build(deps): bump github.com/cpuguy83/go-md2man/v2 from 2.0.3 to 2.0.4
by [@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/cli/cli/pull/8844](https://togithub.com/cli/cli/pull/8844)

#### New Contributors

- [@&#8203;cuinix](https://togithub.com/cuinix) made their first
contribution in
[https://github.com/cli/cli/pull/8795](https://togithub.com/cli/cli/pull/8795)
- [@&#8203;gregsmi](https://togithub.com/gregsmi) made their first
contribution in
[https://github.com/cli/cli/pull/8797](https://togithub.com/cli/cli/pull/8797)
- [@&#8203;nobe4](https://togithub.com/nobe4) made their first
contribution in
[https://github.com/cli/cli/pull/8778](https://togithub.com/cli/cli/pull/8778)
- [@&#8203;malor](https://togithub.com/malor) made their first
contribution in
[https://github.com/cli/cli/pull/8834](https://togithub.com/cli/cli/pull/8834)
- [@&#8203;yasunori0418](https://togithub.com/yasunori0418) made their
first contribution in
[https://github.com/cli/cli/pull/8754](https://togithub.com/cli/cli/pull/8754)

**Full Changelog**: https://github.com/cli/cli/compare/v2.45.0...v2.46.0

</details>

<details>
<summary>derailed/k9s (derailed/k9s)</summary>

### [`v0.32.4`](https://togithub.com/derailed/k9s/releases/tag/v0.32.4)

[Compare
Source](https://togithub.com/derailed/k9s/compare/v0.32.3...v0.32.4)

<img
src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s.png"
align="center" width="800" height="auto"/>

### Release v0.32.4
#### Notes

Thank you to all that contributed with flushing out issues and
enhancements for K9s!
I'll try to mark some of these issues as fixed. But if you don't mind
grab the latest rev
and see if we're happier with some of the fixes!
If you've filed an issue please help me verify and close.

Your support, kindness and awesome suggestions to make K9s better are,
as ever, very much noted and appreciated!
Also big thanks to all that have allocated their own time to help others
on both slack and on this repo!!

As you may know, K9s is not pimped out by corps with deep pockets, thus
if you feel K9s is helping your Kubernetes journey,
please consider joining our [sponsorship
program](https://togithub.com/sponsors/derailed) and/or make some noise
on social! [@&#8203;kitesurfer](https://twitter.com/kitesurfer)

On Slack? Please join us
[K9slackers](https://join.slack.com/t/k9sers/shared_invite/enQtOTA5MDEyNzI5MTU0LWQ1ZGI3MzliYzZhZWEyNzYxYzA3NjE0YTk1YmFmNzViZjIyNzhkZGI0MmJjYzhlNjdlMGJhYzE2ZGU1NjkyNTM)

#### Maintenance Release!

***

#### ♫ Sounds Behind The Release ♭

Thinking of all you at KubeCon Paris!!
May I suggest a nice glass of `cold Merlote` or other fine grape juices
from my country?

- [Le Gorille - George
Brassens](https://www.youtube.com/watch?v=KVfwvk_yVyA)
- [Les Funerailles D'antan (Love this guy!) - George
Brassens](https://www.youtube.com/watch?v=bwb5k4k2EMc)
- [Poinconneur Des Lilas - Serge
Gainsbourg](https://www.youtube.com/watch?v=eWkWCFzkOvU)
- [Mon Legionaire (Yup! same guy??) - Serge
Gainsbourg](https://www.youtube.com/watch?v=gl8gopryqWI)
- [Les Cornichons - Nino
Ferrer](https://www.youtube.com/watch?v=N7JSW4NhM8I)
- [Paris s'eveille - Jacques
Dutronc](https://www.youtube.com/watch?v=3WcCg6rm3uM)

***

#### Videos Are In The Can!

Please dial [K9s
Channel](https://www.youtube.com/channel/UC897uwPygni4QIjkPCpgjmw) for
up coming content...

-   [K9s v0.31.0 Configs+Sneak peek](https://youtu.be/X3444KfjguE)
-   [K9s v0.30.0 Sneak peek](https://youtu.be/mVBc1XneRJ4)
-   [Vulnerability Scans](https://youtu.be/ULkl0MsaidU)

***

#### Resolved Issues

- [#&#8203;2608](https://togithub.com/derailed/k9s/issues/2608) Make the
sanitize feature easier to use
- [#&#8203;2605](https://togithub.com/derailed/k9s/issues/2605) Built-in
shortcuts being overridden by plugins result in excessive logging
- [#&#8203;2604](https://togithub.com/derailed/k9s/issues/2604) Ability
to mark a plugin as Dangerous/destructive
- [#&#8203;2592](https://togithub.com/derailed/k9s/issues/2592) "list
access denied" when switching contexts within k9s since 0.32.0

***

#### Contributed PRs

Please be sure to give `Big Thanks!` and `ATTA Girls/Boys!` to all the
fine contributors for making K9s better for all of us!!

- [#&#8203;2621](https://togithub.com/derailed/k9s/pull/2621) Fix snap
build

***

<img
src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png"
width="32" height="auto"/> © 2024 Imhotep Software LLC. All materials
licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)

</details>

<details>
<summary>eza-community/eza (eza-community/eza)</summary>

###
[`v0.18.8`](https://togithub.com/eza-community/eza/releases/tag/v0.18.8):
eza v0.18.8

[Compare
Source](https://togithub.com/eza-community/eza/compare/v0.18.7...v0.18.8)

### Changelog

#### \[0.18.8] - 2024-03-21

##### Bug Fixes

-   Avoid deprecation warnings
-   Rustfmt issues

##### Features

-   Add fennel lang icon and associations

##### Miscellaneous Tasks

-   Release eza v0.18.8

### Checksums

#### sha256sum

80565916de55b23c3cabb363ba1cb7f323f99b158e75b6c029a64108de7bdad9
./target/bin-0.18.8/eza_aarch64-unknown-linux-gnu.tar.gz
d3532278f5eae1c1dd57bcc9373f05b49f40ffac880d5c4efb67ac5d93cdf0ea
./target/bin-0.18.8/eza_aarch64-unknown-linux-gnu.zip
2c1722afbb0f90e40047cfffa93f04fb9b89633402236fb75119c9105265271f
./target/bin-0.18.8/eza_arm-unknown-linux-gnueabihf.tar.gz
a832c4694228780f43f467e2f0536bd4a8969a455edbb872eb8b4614ebd157e0
./target/bin-0.18.8/eza_arm-unknown-linux-gnueabihf.zip
39cc743e9293a5e269b2b2baf167f4f868f682143dc8b1f87efd64848bb3bca4
./target/bin-0.18.8/eza.exe_x86_64-pc-windows-gnu.tar.gz
9b331b2eee259a9afbffd39e5018735651f8053c5429714cdc46a02f571463e7
./target/bin-0.18.8/eza.exe_x86_64-pc-windows-gnu.zip
2e12d0b714aa011d23abb72459a2478eb9e369ac564a9a7e39ba6ec7ef775ad4
./target/bin-0.18.8/eza_x86_64-unknown-linux-gnu.tar.gz
e3c9c3535732cecad5eb9d786e1f7a7c66aa28d42a3516046e5b1cf7f3799920
./target/bin-0.18.8/eza_x86_64-unknown-linux-gnu.zip
2fc6c3ead5c8bc596643597737ba596aee2f61772792927e4e9e602525a6ae81
./target/bin-0.18.8/eza_x86_64-unknown-linux-musl.tar.gz
543f69f52165f654c5ab869319663d7f4ebdc95b7fc9c23be003ca551aec5dc3
./target/bin-0.18.8/eza_x86_64-unknown-linux-musl.zip

#### md5sum

f3dece765bb95c732bce9406c1eb825a
./target/bin-0.18.8/eza_aarch64-unknown-linux-gnu.tar.gz
b655997af2b0df307abd3a126e48fc3d
./target/bin-0.18.8/eza_aarch64-unknown-linux-gnu.zip
9cd1ae35fd90e4341cf8ed1b4a3d6cd9
./target/bin-0.18.8/eza_arm-unknown-linux-gnueabihf.tar.gz
e9cd1a917b39827fc159c100faaf28b9
./target/bin-0.18.8/eza_arm-unknown-linux-gnueabihf.zip
9f02446483003c219eecc1dc15273956
./target/bin-0.18.8/eza.exe_x86_64-pc-windows-gnu.tar.gz
db239fa66fde9800770384831e3a86fa
./target/bin-0.18.8/eza.exe_x86_64-pc-windows-gnu.zip
5722d3f4e4f2848d770713341c7c4bfd
./target/bin-0.18.8/eza_x86_64-unknown-linux-gnu.tar.gz
c9f5ece20dc527fd4ecf4f77bbf70b56
./target/bin-0.18.8/eza_x86_64-unknown-linux-gnu.zip
0826369c7f0ab3b17c4275f98ff1ab70
./target/bin-0.18.8/eza_x86_64-unknown-linux-musl.tar.gz
3c3633a6c54d32ee9f04277f4b103edc
./target/bin-0.18.8/eza_x86_64-unknown-linux-musl.zip

#### blake3sum

0c7fc89dd1cf514e62e644e8ff8dab8759d6bd42f364f2768c41df92ec9e9dfc
./target/bin-0.18.8/eza_aarch64-unknown-linux-gnu.tar.gz
540def87f4f455fcd6067648f05498db775c6c03f291088d03f1dc4cc8cf68e7
./target/bin-0.18.8/eza_aarch64-unknown-linux-gnu.zip
1980d8004ad1f9b0291381c4d57db64fc8ebcf1c0961a8ac3c05c3697d7dfaf3
./target/bin-0.18.8/eza_arm-unknown-linux-gnueabihf.tar.gz
9a80d9f0cfc83521d119778b52b55dce4b33f28b02624297c712efd3ade53f19
./target/bin-0.18.8/eza_arm-unknown-linux-gnueabihf.zip
5d97ba1a2eaccc814aec982922f89ee218521b343b5f3ad6900596ad9574bfa3
./target/bin-0.18.8/eza.exe_x86_64-pc-windows-gnu.tar.gz
2d274f097297ff222dc7756903dfb73fdc744051c75b815d2eea2e08ee0f4418
./target/bin-0.18.8/eza.exe_x86_64-pc-windows-gnu.zip
04ca09128611f9719ac0a7c387282049489243bbe74be8de797d845ec380b9ee
./target/bin-0.18.8/eza_x86_64-unknown-linux-gnu.tar.gz
3e58bf50b39c1b20801f5282b612103b07b12089d2a24f3dcec9882ac8482c8c
./target/bin-0.18.8/eza_x86_64-unknown-linux-gnu.zip
1df711c44e08cc08fc26753f5c50f9de244fdbd7e2f8cc3961d82f101d775154
./target/bin-0.18.8/eza_x86_64-unknown-linux-musl.tar.gz
9d71a5afbc797ca63eecf254fc4971c2a1dd188ce28c8cb4a10cf1a273d747d5
./target/bin-0.18.8/eza_x86_64-unknown-linux-musl.zip

</details>

<details>
<summary>golangci/golangci-lint (golangci/golangci-lint)</summary>

###
[`v1.57.1`](https://togithub.com/golangci/golangci-lint/releases/tag/v1.57.1)

[Compare
Source](https://togithub.com/golangci/golangci-lint/compare/v1.57.0...v1.57.1)

#### Changelog

-
[`87b6bf1`](https://togithub.com/golangci/golangci-lint/commit/87b6bf17)
build(deps): bump github.com/golangci/plugin-module-register from 0.1.0
to 0.1.1
([#&#8203;4549](https://togithub.com/golangci/golangci-lint/issues/4549))
-
[`921d535`](https://togithub.com/golangci/golangci-lint/commit/921d5357)
build(deps): bump github.com/pelletier/go-toml/v2 from 2.1.1 to 2.2.0
([#&#8203;4548](https://togithub.com/golangci/golangci-lint/issues/4548))
-
[`cd890db`](https://togithub.com/golangci/golangci-lint/commit/cd890db2)
fix: filter invalid issues before other processors
([#&#8203;4552](https://togithub.com/golangci/golangci-lint/issues/4552))

###
[`v1.57.0`](https://togithub.com/golangci/golangci-lint/compare/v1.56.2...v1.57.0)

[Compare
Source](https://togithub.com/golangci/golangci-lint/compare/v1.56.2...v1.57.0)

</details>

<details>
<summary>gruntwork-io/terragrunt (gruntwork-io/terragrunt)</summary>

###
[`v0.55.20`](https://togithub.com/gruntwork-io/terragrunt/compare/v0.55.19...v0.55.20)

[Compare
Source](https://togithub.com/gruntwork-io/terragrunt/compare/v0.55.19...v0.55.20)

###
[`v0.55.19`](https://togithub.com/gruntwork-io/terragrunt/releases/tag/v0.55.19)

[Compare
Source](https://togithub.com/gruntwork-io/terragrunt/compare/v0.55.18...v0.55.19)

#### Updated CLI args, config attributes and blocks

-   `scaffold`

#### Description

-   Fix grammar in feature text
-   Fix URL handling in the `scaffold` command
-   Updated gon version to 0.2.5

#### Related links

-
[https://github.com/gruntwork-io/terragrunt/pull/3010](https://togithub.com/gruntwork-io/terragrunt/pull/3010)
-
[https://github.com/gruntwork-io/terragrunt/pull/3005](https://togithub.com/gruntwork-io/terragrunt/pull/3005)

**Full Changelog**:
https://github.com/gruntwork-io/terragrunt/compare/v0.55.18...v0.55.19

###
[`v0.55.18`](https://togithub.com/gruntwork-io/terragrunt/releases/tag/v0.55.18)

[Compare
Source](https://togithub.com/gruntwork-io/terragrunt/compare/v0.55.17...v0.55.18)

#### Description

-   Updated github.com/cloudflare/circl from 1.3.3 to 1.3.7
-   Updated github.com/go-jose/go-jose/v3 from 3.0.0 to 3.0.3
-   Updated google.golang.org/protobuf from 1.32.0 to 1.33.0
-   Updated nokogiri to 1.16.3
-   Updates mini_portile2 from 2.4.0 to 2.8.5

#### Related links

-
[https://github.com/gruntwork-io/terragrunt/pull/2995](https://togithub.com/gruntwork-io/terragrunt/pull/2995)
-
[https://github.com/gruntwork-io/terragrunt/pull/2996](https://togithub.com/gruntwork-io/terragrunt/pull/2996)
-
[https://github.com/gruntwork-io/terragrunt/pull/2929](https://togithub.com/gruntwork-io/terragrunt/pull/2929)
-
[https://github.com/gruntwork-io/terragrunt/pull/3000](https://togithub.com/gruntwork-io/terragrunt/pull/3000)
-
[https://github.com/gruntwork-io/terragrunt/pull/3009](https://togithub.com/gruntwork-io/terragrunt/pull/3009)

###
[`v0.55.17`](https://togithub.com/gruntwork-io/terragrunt/releases/tag/v0.55.17)

[Compare
Source](https://togithub.com/gruntwork-io/terragrunt/compare/v0.55.16...v0.55.17)

#### Updated CLI args, config attributes and blocks

-   `terraform`

#### Description

-   Added support for OpenTofu registry for shorthand TFR modules.

#### Related links

-
[https://github.com/gruntwork-io/terragrunt/pull/2961](https://togithub.com/gruntwork-io/terragrunt/pull/2961)

</details>

<details>
<summary>jesseduffield/lazygit (jesseduffield/lazygit)</summary>

###
[`v0.41.0`](https://togithub.com/jesseduffield/lazygit/releases/tag/v0.41.0)

[Compare
Source](https://togithub.com/jesseduffield/lazygit/compare/v0.40.2...pre-0.41)

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:

[<img
src="https://github.com/jesseduffield/lazygit/assets/8456633/f9b47c5e-f8b2-4b41-8f51-bf06b01046e2">](https://youtu.be/\_REmkoIyPW0)

#### What's Changed

Here's some highlighted features:

##### Range select


![range-select](https://togithub.com/jesseduffield/lazygit/blob/assets/demo/interactive_rebase-compressed.gif?raw=true)

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 [@&#8203;afhoffman](https://togithub.com/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:

```yml
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:

```yml
git:
  commit:
    autoWrapCommitMessage: true
    autoWrapWidth: 72
```

Thanks to [@&#8203;stefanhaller](https://togithub.com/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 [@&#8203;stefanhaller](https://togithub.com/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 [@&#8203;stefanhaller](https://togithub.com/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 [@&#8203;stefanhaller](https://togithub.com/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](https://togithub.com/jesseduffield/lazygit/blob/master/docs/Fixup_Commits.md#finding-the-commit-to-create-a-fixup-for)

Thanks to [@&#8203;stefanhaller](https://togithub.com/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 [@&#8203;AzraelSec](https://togithub.com/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 [@&#8203;omaussa](https://togithub.com/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 [@&#8203;Part22](https://togithub.com/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 [@&#8203;hosaka](https://togithub.com/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 [@&#8203;jwhitley](https://togithub.com/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
([@&#8203;stefanhaller](https://togithub.com/stefanhaller))
- Error toasts now appear for some errors (less intrusive than popups)
([@&#8203;stefanhaller](https://togithub.com/stefanhaller))
- Search history is now retained
([@&#8203;karimkhaleel](https://togithub.com/karimkhaleel))
- Git log is shown by default
([@&#8203;stefanhaller](https://togithub.com/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:

```yml
gui:
  filterMode: 'fuzzy'
```

#### What's Changed

##### All Enhancements 🔥

- Add range selection ability on list contexts by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/3207](https://togithub.com/jesseduffield/lazygit/pull/3207)
- Allow deleting remote tags/branches from local tag/branch views by
[@&#8203;AzraelSec](https://togithub.com/AzraelSec) in
[https://github.com/jesseduffield/lazygit/pull/2738](https://togithub.com/jesseduffield/lazygit/pull/2738)
- Add command to show divergence from upstream by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2871](https://togithub.com/jesseduffield/lazygit/pull/2871)
- Add 'Quick start interactive rebase' action by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/3213](https://togithub.com/jesseduffield/lazygit/pull/3213)
- Add command to open git difftool by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3156](https://togithub.com/jesseduffield/lazygit/pull/3156)
- Support editing files in existing neovim instance by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2916](https://togithub.com/jesseduffield/lazygit/pull/2916)
- Show commit mark before showing extra info by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2928](https://togithub.com/jesseduffield/lazygit/pull/2928)
- Jump to middle of the view when selection leaves the visible area by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2915](https://togithub.com/jesseduffield/lazygit/pull/2915)
- Add emacs-keybinds for word navigation by
[@&#8203;horriblename](https://togithub.com/horriblename) in
[https://github.com/jesseduffield/lazygit/pull/2935](https://togithub.com/jesseduffield/lazygit/pull/2935)
- Add `gui.scrollOffBehavior` config for scrolling list views by
half-pages by [@&#8203;stefanhaller](https://togithub.com/stefanhaller)
in
[https://github.com/jesseduffield/lazygit/pull/2939](https://togithub.com/jesseduffield/lazygit/pull/2939)
- Switch to editor from commit message panel by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2881](https://togithub.com/jesseduffield/lazygit/pull/2881)
- Select same commit again after pressing "e" to edit a commit by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2954](https://togithub.com/jesseduffield/lazygit/pull/2954)
- Support custom keybindings for confirm discard by
[@&#8203;mskelton](https://togithub.com/mskelton) in
[https://github.com/jesseduffield/lazygit/pull/2960](https://togithub.com/jesseduffield/lazygit/pull/2960)
- Allow adding a port to webDomain part of services config by
[@&#8203;raidora](https://togithub.com/raidora) in
[https://github.com/jesseduffield/lazygit/pull/2908](https://togithub.com/jesseduffield/lazygit/pull/2908)
- Add icons for files with .mdx and .svelte file extensions by
[@&#8203;hrstmr](https://togithub.com/hrstmr) in
[https://github.com/jesseduffield/lazygit/pull/2889](https://togithub.com/jesseduffield/lazygit/pull/2889)
- Section headers in keybindings menu by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2911](https://togithub.com/jesseduffield/lazygit/pull/2911)
- Check for staged files for "Amend commit" and "Create fixup commit" by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2970](https://togithub.com/jesseduffield/lazygit/pull/2970)
- Add support for external diff commands (e.g. difftastic) by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2868](https://togithub.com/jesseduffield/lazygit/pull/2868)
- Save diff context size in state.yml instead of config.yml by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2969](https://togithub.com/jesseduffield/lazygit/pull/2969)
- Support to reset the current branch to a selected branch upstream by
[@&#8203;AzraelSec](https://togithub.com/AzraelSec) in
[https://github.com/jesseduffield/lazygit/pull/2940](https://togithub.com/jesseduffield/lazygit/pull/2940)
- Replace whitespace with '-' when renaming a branch by
[@&#8203;calthejuggler](https://togithub.com/calthejuggler) in
[https://github.com/jesseduffield/lazygit/pull/2990](https://togithub.com/jesseduffield/lazygit/pull/2990)
- Add jump-to-panel label config setting by
[@&#8203;MariaSolOs](https://togithub.com/MariaSolOs) in
[https://github.com/jesseduffield/lazygit/pull/2993](https://togithub.com/jesseduffield/lazygit/pull/2993)
- Add co-author to commits by
[@&#8203;omaussa](https://togithub.com/omaussa) in
[https://github.com/jesseduffield/lazygit/pull/2912](https://togithub.com/jesseduffield/lazygit/pull/2912)
- Change the default of the "gui.borders" config to "rounded" by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2998](https://togithub.com/jesseduffield/lazygit/pull/2998)
- Add a DisabledReason mechanism for menu items and keybindings by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2992](https://togithub.com/jesseduffield/lazygit/pull/2992)
- Allow cherry-picking commits during a rebase by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3013](https://togithub.com/jesseduffield/lazygit/pull/3013)
- Add history for search view by
[@&#8203;karimkhaleel](https://togithub.com/karimkhaleel) in
[https://github.com/jesseduffield/lazygit/pull/2877](https://togithub.com/jesseduffield/lazygit/pull/2877)
- Replace loader panels with waiting status (pull/push/fetch) by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2973](https://togithub.com/jesseduffield/lazygit/pull/2973)
- Add menu to rebase onto selected branch remote upstream by
[@&#8203;AzraelSec](https://togithub.com/AzraelSec) in
[https://github.com/jesseduffield/lazygit/pull/3020](https://togithub.com/jesseduffield/lazygit/pull/3020)
- Add ability to force portrait mode by
[@&#8203;ldelossa](https://togithub.com/ldelossa) in
[https://github.com/jesseduffield/lazygit/pull/3037](https://togithub.com/jesseduffield/lazygit/pull/3037)
- Add Micro editor preset by [@&#8203;kytta](https://togithub.com/kytta)
in
[https://github.com/jesseduffield/lazygit/pull/3049](https://togithub.com/jesseduffield/lazygit/pull/3049)
- Show sync status in branches list by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3021](https://togithub.com/jesseduffield/lazygit/pull/3021)
- Add 'lvim' editor preset for lunarvim by
[@&#8203;zottelsheep](https://togithub.com/zottelsheep) in
[https://github.com/jesseduffield/lazygit/pull/3074](https://togithub.com/jesseduffield/lazygit/pull/3074)
- Truncate branch names to make branch status always visible by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3075](https://togithub.com/jesseduffield/lazygit/pull/3075)
- Color file icons by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/3080](https://togithub.com/jesseduffield/lazygit/pull/3080)
- Add UserConfig jsonschema generation script by
[@&#8203;karimkhaleel](https://togithub.com/karimkhaleel) in
[https://github.com/jesseduffield/lazygit/pull/3039](https://togithub.com/jesseduffield/lazygit/pull/3039)
- Add a copy-to-clipboard menu to the file view (with `diff` copy
options) by [@&#8203;AzraelSec](https://togithub.com/AzraelSec) in
[https://github.com/jesseduffield/lazygit/pull/3104](https://togithub.com/jesseduffield/lazygit/pull/3104)
- Fix bottom line alignment by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3076](https://togithub.com/jesseduffield/lazygit/pull/3076)
- Make move up/down blocking by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2966](https://togithub.com/jesseduffield/lazygit/pull/2966)
- Add remote branch sorting menu by
[@&#8203;hosaka](https://togithub.com/hosaka) in
[https://github.com/jesseduffield/lazygit/pull/3171](https://togithub.com/jesseduffield/lazygit/pull/3171)
- Add age to stash entries by
[@&#8203;AzraelSec](https://togithub.com/AzraelSec) in
[https://github.com/jesseduffield/lazygit/pull/3174](https://togithub.com/jesseduffield/lazygit/pull/3174)
- Add local branch sorting menu by
[@&#8203;hosaka](https://togithub.com/hosaka) in
[https://github.com/jesseduffield/lazygit/pull/3182](https://togithub.com/jesseduffield/lazygit/pull/3182)
- Show a friendly error message when starting lazygit from a
non-existent cwd by
[@&#8203;simonwhitaker](https://togithub.com/simonwhitaker) in
[https://github.com/jesseduffield/lazygit/pull/3192](https://togithub.com/jesseduffield/lazygit/pull/3192)
- Replace copy commit SHA with copy commit subject on the y s keybind in
the commits view by
[@&#8203;karimkhaleel](https://togithub.com/karimkhaleel) in
[https://github.com/jesseduffield/lazygit/pull/3188](https://togithub.com/jesseduffield/lazygit/pull/3188)
- Add config setting for splitting window vertically in half screen mode
by [@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3133](https://togithub.com/jesseduffield/lazygit/pull/3133)
- Add command to find base commit for creating a fixup by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3105](https://togithub.com/jesseduffield/lazygit/pull/3105)
- Show Toast instead of error panel when invoking a disabled command by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3180](https://togithub.com/jesseduffield/lazygit/pull/3180)
- Show file names in default colour by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/3081](https://togithub.com/jesseduffield/lazygit/pull/3081)
- Add config setting to suppress showing file icons by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3216](https://togithub.com/jesseduffield/lazygit/pull/3216)
- Support range select for rebase actions by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/3232](https://togithub.com/jesseduffield/lazygit/pull/3232)
- Make range selections created with the mouse non-sticky by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3234](https://togithub.com/jesseduffield/lazygit/pull/3234)
- Support range select for staging/discarding files by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/3248](https://togithub.com/jesseduffield/lazygit/pull/3248)
- Inline status for fetching remotes by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3238](https://togithub.com/jesseduffield/lazygit/pull/3238)
- Add shortcuts for filtering files by status by
[@&#8203;mark2185](https://togithub.com/mark2185) in
[https://github.com/jesseduffield/lazygit/pull/3137](https://togithub.com/jesseduffield/lazygit/pull/3137)
- Keep same selection range when quick-starting an interactive rebase by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3247](https://togithub.com/jesseduffield/lazygit/pull/3247)
- Add loads of tooltips by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/3269](https://togithub.com/jesseduffield/lazygit/pull/3269)
- Show better keybinding suggestions by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/3203](https://togithub.com/jesseduffield/lazygit/pull/3203)
- Support selecting file range in patch builder by
[@&#8203;afhoffman](https://togithub.com/afhoffman) in
[https://github.com/jesseduffield/lazygit/pull/3259](https://togithub.com/jesseduffield/lazygit/pull/3259)
- Add command to squash all fixups in the current branch by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3274](https://togithub.com/jesseduffield/lazygit/pull/3274)
- Use slimmer scrollbars by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/3283](https://togithub.com/jesseduffield/lazygit/pull/3283)
- Clear cherry-picked commits after pasting by
[@&#8203;molejnik88](https://togithub.com/molejnik88) in
[https://github.com/jesseduffield/lazygit/pull/3240](https://togithub.com/jesseduffield/lazygit/pull/3240)
- Change default of git.log.showGraph to 'always' by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3314](https://togithub.com/jesseduffield/lazygit/pull/3314)
- Support range select removing files from a commit by
[@&#8203;afhoffman](https://togithub.com/afhoffman) in
[https://github.com/jesseduffield/lazygit/pull/3276](https://togithub.com/jesseduffield/lazygit/pull/3276)
- Migrate git.log.showGraph and git.log.order to app state by
[@&#8203;hosaka](https://togithub.com/hosaka) in
[https://github.com/jesseduffield/lazygit/pull/3197](https://togithub.com/jesseduffield/lazygit/pull/3197)
- Change "git reset" default to --mixed by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3264](https://togithub.com/jesseduffield/lazygit/pull/3264)
- Add author filtering to commit view by
[@&#8203;part22](https://togithub.com/part22) in
[https://github.com/jesseduffield/lazygit/pull/3302](https://togithub.com/jesseduffield/lazygit/pull/3302)
- Provide two helix presets, one for "helix" and one for "hx" by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3346](https://togithub.com/jesseduffield/lazygit/pull/3346)
- Don't show branch head on rebase todos if the rebase.updateRefs config
is on by [@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3340](https://togithub.com/jesseduffield/lazygit/pull/3340)
- Show all submodules recursively by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3341](https://togithub.com/jesseduffield/lazygit/pull/3341)
- Support setting a range of commits to "edit" outside of a rebase by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3370](https://togithub.com/jesseduffield/lazygit/pull/3370)
- Adjust selection after squashing fixups by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3338](https://togithub.com/jesseduffield/lazygit/pull/3338)
- Auto-wrap commit message while typing by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3173](https://togithub.com/jesseduffield/lazygit/pull/3173)
- Add Co-Author support to new commits by
[@&#8203;2KAbhishek](https://togithub.com/2KAbhishek) in
[https://github.com/jesseduffield/lazygit/pull/3097](https://togithub.com/jesseduffield/lazygit/pull/3097)
- Show "breaking changes" message at startup by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3377](https://togithub.com/jesseduffield/lazygit/pull/3377)
- Allow moving and deleting update-ref todos by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3391](https://togithub.com/jesseduffield/lazygit/pull/3391)
- When checking out a remote branch by name, ask the user how by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3388](https://togithub.com/jesseduffield/lazygit/pull/3388)
- Use substring filtering instead of fuzzy filtering by default by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3376](https://togithub.com/jesseduffield/lazygit/pull/3376)
- Always prompt to return from subprocess if there was an error by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3410](https://togithub.com/jesseduffield/lazygit/pull/3410)
- When adding a new remote, select it and fetch it by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3401](https://togithub.com/jesseduffield/lazygit/pull/3401)
- Support editing multiple files at once using range selection by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3407](https://togithub.com/jesseduffield/lazygit/pull/3407)
- Make it easy to create "amend!" commits by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3409](https://togithub.com/jesseduffield/lazygit/pull/3409)
- Add config to truncate commit hashes when copying them to the
clipboard by [@&#8203;stefanhaller](https://togithub.com/stefanhaller)
in
[https://github.com/jesseduffield/lazygit/pull/3402](https://togithub.com/jesseduffield/lazygit/pull/3402)

##### Fixes 🔧

- Fix issue where explosion effect was out-of-view by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2909](https://togithub.com/jesseduffield/lazygit/pull/2909)
- Show dialogue when attempting to open info link fails by
[@&#8203;simonwhitaker](https://togithub.com/simonwhitaker) in
[https://github.com/jesseduffield/lazygit/pull/2899](https://togithub.com/jesseduffield/lazygit/pull/2899)
- Fix jumping to the correct line from the staging view by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2919](https://togithub.com/jesseduffield/lazygit/pull/2919)
- Fix sha colors when rebasing by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2946](https://togithub.com/jesseduffield/lazygit/pull/2946)
- Fix the commit graph display after selection jumps in commits view by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2943](https://togithub.com/jesseduffield/lazygit/pull/2943)
- Handle trailing slash in worktree path by
[@&#8203;Krismix1](https://togithub.com/Krismix1) in
[https://github.com/jesseduffield/lazygit/pull/2947](https://togithub.com/jesseduffield/lazygit/pull/2947)
- Fix escape not cancelling filter mode, but closing the menu instead by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2977](https://togithub.com/jesseduffield/lazygit/pull/2977)
- Use `Error` method to handle commits url copy from unknown service by
[@&#8203;AzraelSec](https://togithub.com/AzraelSec) in
[https://github.com/jesseduffield/lazygit/pull/3007](https://togithub.com/jesseduffield/lazygit/pull/3007)
- Hide waiting status during credentials prompt by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3016](https://togithub.com/jesseduffield/lazygit/pull/3016)
- Use upstream branch when opening pull requests by
[@&#8203;mark2185](https://togithub.com/mark2185) in
[https://github.com/jesseduffield/lazygit/pull/2693](https://togithub.com/jesseduffield/lazygit/pull/2693)
- Fix issue where active search inappropriately changed selected line by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/3022](https://togithub.com/jesseduffield/lazygit/pull/3022)
- Respect $GIT_WORK_TREE and $GIT_DIR env vars (fix
[#&#8203;3010](https://togithub.com/jesseduffield/lazygit/issues/3010)).
by [@&#8203;intrntbrn](https://togithub.com/intrntbrn) in
[https://github.com/jesseduffield/lazygit/pull/3024](https://togithub.com/jesseduffield/lazygit/pull/3024)
- Fix crash when trying to filter the list of remotes by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3059](https://togithub.com/jesseduffield/lazygit/pull/3059)
- Re-apply filter when model changes by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3058](https://togithub.com/jesseduffield/lazygit/pull/3058)
- Use a PTY when calling external diff command by
[@&#8203;AFutureD](https://togithub.com/AFutureD) in
[https://github.com/jesseduffield/lazygit/pull/3120](https://togithub.com/jesseduffield/lazygit/pull/3120)
- Re-enable 'Unset upstream' option when upstream branch is missing by
[@&#8203;mark2185](https://togithub.com/mark2185) in
[https://github.com/jesseduffield/lazygit/pull/3086](https://togithub.com/jesseduffield/lazygit/pull/3086)
- Fall back to WithWaitingStatus if item is not visible by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3083](https://togithub.com/jesseduffield/lazygit/pull/3083)
- Fix checking out a tag when there is a branch with the same name by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3179](https://togithub.com/jesseduffield/lazygit/pull/3179)
- Fix preserving the commit message when description contains blank
lines by [@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3170](https://togithub.com/jesseduffield/lazygit/pull/3170)
- Allow multiple fetch commands (or fetch and pull) to run concurrently
by [@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3202](https://togithub.com/jesseduffield/lazygit/pull/3202)
- Support insteadOf URL rewriting when opening URLs in browser by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3177](https://togithub.com/jesseduffield/lazygit/pull/3177)
- Fix keybindings for characters involving AltGr on Windows by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3194](https://togithub.com/jesseduffield/lazygit/pull/3194)
- Do not include keybindings from another view in keybindings menu by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/3220](https://togithub.com/jesseduffield/lazygit/pull/3220)
- Fix crash with short branch names by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3219](https://togithub.com/jesseduffield/lazygit/pull/3219)
- Keep same branch selected when fetching a branch while sorted by date
by [@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3186](https://togithub.com/jesseduffield/lazygit/pull/3186)
- Use git rev-parse to obtain repository and worktree paths by
[@&#8203;jwhitley](https://togithub.com/jwhitley) in
[https://github.com/jesseduffield/lazygit/pull/3183](https://togithub.com/jesseduffield/lazygit/pull/3183)
- Pass absolute file paths to all editor commands by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3255](https://togithub.com/jesseduffield/lazygit/pull/3255)
- Disallow cherry-picking merge commits by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3316](https://togithub.com/jesseduffield/lazygit/pull/3316)
- Fix two problems related to update-ref rebase todo items by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3290](https://togithub.com/jesseduffield/lazygit/pull/3290)
- Fix order of custom commands history by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3286](https://togithub.com/jesseduffield/lazygit/pull/3286)
- Fix some problems with patches if `git diff` was customized with
config (e.g. `external` or `noprefix`). by
[@&#8203;mricherzhagen](https://togithub.com/mricherzhagen) in
[https://github.com/jesseduffield/lazygit/pull/3222](https://togithub.com/jesseduffield/lazygit/pull/3222)
- Use $XDG_STATE_HOME for state.yml by
[@&#8203;horriblename](https://togithub.com/horriblename) in
[https://github.com/jesseduffield/lazygit/pull/2936](https://togithub.com/jesseduffield/lazygit/pull/2936)
- Fix display of Chinese characters on Windows by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3352](https://togithub.com/jesseduffield/lazygit/pull/3352)
- Allow more than one argument in git.merging.args config by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3336](https://togithub.com/jesseduffield/lazygit/pull/3336)
- Don't strike out reserved keys in menus by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3365](https://togithub.com/jesseduffield/lazygit/pull/3365)
- Don't ask to force-push if the remote rejected updates by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3387](https://togithub.com/jesseduffield/lazygit/pull/3387)
- Fix container detection by
[@&#8203;aritmos](https://togithub.com/aritmos) in
[https://github.com/jesseduffield/lazygit/pull/3412](https://togithub.com/jesseduffield/lazygit/pull/3412)

##### Maintenance ⚙️

- Add Click() to GuiDriver by
[@&#8203;simonwhitaker](https://togithub.com/simonwhitaker) in
[https://github.com/jesseduffield/lazygit/pull/2898](https://togithub.com/jesseduffield/lazygit/pull/2898)
- Add Makefile by [@&#8203;kyu08](https://togithub.com/kyu08) in
[https://github.com/jesseduffield/lazygit/pull/2937](https://togithub.com/jesseduffield/lazygit/pull/2937)
- fix GitHub Actions warnings by
[@&#8203;kyu08](https://togithub.com/kyu08) in
[https://github.com/jesseduffield/lazygit/pull/2950](https://togithub.com/jesseduffield/lazygit/pull/2950)
- Add instruction in PR template to start PRs with an imperative by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2967](https://togithub.com/jesseduffield/lazygit/pull/2967)
- Don't show toasts when running integration tests by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2975](https://togithub.com/jesseduffield/lazygit/pull/2975)
- Various debugging improvements by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3000](https://togithub.com/jesseduffield/lazygit/pull/3000)
- Rename `test/results` to `test/_results` by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3012](https://togithub.com/jesseduffield/lazygit/pull/3012)
- Support passing -race flag to integration tests by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3019](https://togithub.com/jesseduffield/lazygit/pull/3019)
- Improve debugging of integration tests by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3029](https://togithub.com/jesseduffield/lazygit/pull/3029)
- Use go:generate for cheatsheet by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3035](https://togithub.com/jesseduffield/lazygit/pull/3035)
- Change Makefile to build non-optimized by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3028](https://togithub.com/jesseduffield/lazygit/pull/3028)
- Update PR template to use go generate command by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/3041](https://togithub.com/jesseduffield/lazygit/pull/3041)
- Band-aid fix for submodule/reset.go test failure by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3047](https://togithub.com/jesseduffield/lazygit/pull/3047)
- Remove redundant `len` check by
[@&#8203;Juneezee](https://togithub.com/Juneezee) in
[https://github.com/jesseduffield/lazygit/pull/3051](https://togithub.com/jesseduffield/lazygit/pull/3051)
- Add disabled compat for user config
([#&#8203;2833](https://togithub.com/jesseduffield/lazygit/issues/2833))
by [@&#8203;karimkhaleel](https://togithub.com/karimkhaleel) in
[https://github.com/jesseduffield/lazygit/pull/3060](https://togithub.com/jesseduffield/lazygit/pull/3060)
- Fix go.mod file by
[@&#8203;stefanhaller](https://togithub.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/3118](https://togithub.com/jesseduffield/lazygit/pull/3118)
- Capture test code coverage stats by
[@&#8203;jesseduffield](https://togithub.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/3135](https://togithub.com/jesseduffield/lazygit/pull/3135)
- fixed typo in test description by
[@&#8203;schuebel](https://togithub.com/schuebel) in
[https://github.com/jesseduffield/lazygit/pull/3101](https://togithub.com/jesseduffield/lazygit/pull/3101)
-   Update cheatsheets by [@&#8203;stefanhaller](https:

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 4pm on thursday" in timezone
America/Los_Angeles, 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://togithub.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:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjEuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: scottames-github-bot[bot] <162828115+scottames-github-bot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature For large enhancements that add a new chunk of functionality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants