From 3c17aba500c54218266b9c3ed09bc98f9e0ad2e2 Mon Sep 17 00:00:00 2001 From: Ilya Kiselev Date: Sat, 21 Mar 2026 01:18:04 +0300 Subject: [PATCH] feat: add 'reset to custom ref' option in git reset menu Adds a new menu item (key 'c') to the git reset menu that prompts the user to enter an arbitrary ref to reset to. The prompt includes autocomplete suggestions from all known refs (local branches, remote branches, tags, HEAD, etc.). After confirming the ref, the standard soft/mixed/hard type selection menu is shown. Closes #1985 --- pkg/gui/controllers.go | 2 +- pkg/gui/controllers/helpers/refs_helper.go | 27 +++++++++++++++++++--- pkg/i18n/english.go | 4 ++++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/pkg/gui/controllers.go b/pkg/gui/controllers.go index a7eb35919..8775ab3a0 100644 --- a/pkg/gui/controllers.go +++ b/pkg/gui/controllers.go @@ -26,8 +26,8 @@ func (gui *Gui) resetHelpersAndControllers() { recordDirectoryHelper := helpers.NewRecordDirectoryHelper(helperCommon) reposHelper := helpers.NewRecentReposHelper(helperCommon, recordDirectoryHelper, gui.onSwitchToNewRepo) rebaseHelper := helpers.NewMergeAndRebaseHelper(helperCommon) - refsHelper := helpers.NewRefsHelper(helperCommon, rebaseHelper) suggestionsHelper := helpers.NewSuggestionsHelper(helperCommon) + refsHelper := helpers.NewRefsHelper(helperCommon, rebaseHelper, suggestionsHelper) worktreeHelper := helpers.NewWorktreeHelper(helperCommon, reposHelper, refsHelper, suggestionsHelper) setCommitSummary := gui.getCommitMessageSetTextareaTextFn(func() *gocui.View { return gui.Views.CommitMessage }) diff --git a/pkg/gui/controllers/helpers/refs_helper.go b/pkg/gui/controllers/helpers/refs_helper.go index 5f07b8ea6..e4d94aae5 100644 --- a/pkg/gui/controllers/helpers/refs_helper.go +++ b/pkg/gui/controllers/helpers/refs_helper.go @@ -18,16 +18,19 @@ import ( type RefsHelper struct { c *HelperCommon - rebaseHelper *MergeAndRebaseHelper + rebaseHelper *MergeAndRebaseHelper + suggestionsHelper *SuggestionsHelper } func NewRefsHelper( c *HelperCommon, rebaseHelper *MergeAndRebaseHelper, + suggestionsHelper *SuggestionsHelper, ) *RefsHelper { return &RefsHelper{ - c: c, - rebaseHelper: rebaseHelper, + c: c, + rebaseHelper: rebaseHelper, + suggestionsHelper: suggestionsHelper, } } @@ -291,6 +294,24 @@ func (self *RefsHelper) CreateGitResetMenu(name string, ref string) error { } }) + menuItems = append(menuItems, &types.MenuItem{ + LabelColumns: []string{ + self.c.Tr.ResetToCustomRef, + style.FgRed.Sprint("reset --? "), + }, + OnPress: func() error { + self.c.Prompt(types.PromptOpts{ + Title: self.c.Tr.EnterRefToResetTo, + FindSuggestionsFunc: self.suggestionsHelper.GetRefsSuggestionsFunc(), + HandleConfirm: func(response string) error { + return self.CreateGitResetMenu(response, response) + }, + }) + return nil + }, + Key: 'c', + }) + return self.c.Menu(types.CreateMenuOptions{ Title: fmt.Sprintf("%s %s", self.c.Tr.ResetTo, name), Items: menuItems, diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 69ea7012f..662e7b8b2 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -501,6 +501,8 @@ type TranslationSet struct { ShellCommand string CommitChangesWithoutHook string ResetTo string + ResetToCustomRef string + EnterRefToResetTo string ResetSoftTooltip string ResetMixedTooltip string ResetHardTooltip string @@ -1660,6 +1662,8 @@ func EnglishTranslationSet() *TranslationSet { ShellCommand: "Shell command:", CommitChangesWithoutHook: "Commit changes without pre-commit hook", ResetTo: `Reset to`, + ResetToCustomRef: "Reset to custom ref", + EnterRefToResetTo: "Enter ref to reset to:", PressEnterToReturn: "Press enter to return to lazygit", ViewStashOptions: "View stash options", ViewStashOptionsTooltip: "View stash options (e.g. stash all, stash staged, stash unstaged).",