From 09df6477e227a2aec8e6f0379804783ef465e4bf 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 702ed826d11..8e73213c1a1 100644 --- a/pkg/gui/controllers.go +++ b/pkg/gui/controllers.go @@ -28,8 +28,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 d52d9bbad10..9aae0493f1a 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, } } @@ -280,6 +283,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 4c423c2bcbd..61207251880 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -496,6 +496,8 @@ type TranslationSet struct { ShellCommand string CommitChangesWithoutHook string ResetTo string + ResetToCustomRef string + EnterRefToResetTo string ResetSoftTooltip string ResetMixedTooltip string ResetHardTooltip string @@ -1618,6 +1620,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).",