From 9463459894355604df7a65cfdf57bdb400b2b458 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 51c4c3bab64..53f7bff03e0 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 791f0d481d1..b7fa1902570 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, } } @@ -292,6 +295,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 002adb11410..d5d333ccf99 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -498,6 +498,8 @@ type TranslationSet struct { ShellCommand string CommitChangesWithoutHook string ResetTo string + ResetToCustomRef string + EnterRefToResetTo string ResetSoftTooltip string ResetMixedTooltip string ResetHardTooltip string @@ -1628,6 +1630,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).",