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
This commit is contained in:
Ilya Kiselev 2026-03-21 01:18:04 +03:00
parent e59c1d1cb7
commit 3c17aba500
3 changed files with 29 additions and 4 deletions

View file

@ -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 })

View file

@ -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 --? <ref>"),
},
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,

View file

@ -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).",