Remove the "Select parent commit" prompt when reverting a merge commit

In pretty much 100% of the cases, you want to use -m1, so spare users the
complexity of a confusing prompt.

See
https://public-inbox.org/git/e60a8b1a-98c8-4ac7-b966-ff9635bb781d@haller-berlin.de/
for some discussion.
This commit is contained in:
Stefan Haller 2025-03-30 11:54:40 +02:00
parent c13c6356e3
commit f14a3cdd46
4 changed files with 12 additions and 51 deletions

View file

@ -285,15 +285,14 @@ func (self *CommitCommands) ShowFileContentCmdObj(hash string, filePath string)
return self.cmd.New(cmdArgs).DontLog() return self.cmd.New(cmdArgs).DontLog()
} }
// Revert reverts the selected commit by hash // Revert reverts the selected commit by hash. If isMerge is true, we'll pass -m 1
func (self *CommitCommands) Revert(hash string) error { // to say we want to revert the first parent of the merge commit, which is the one
cmdArgs := NewGitCmd("revert").Arg(hash).ToArgv() // people want in 99.9% of cases. In current git versions we could unconditionally
// pass -m 1 even for non-merge commits, but older versions of git choke on it.
return self.cmd.New(cmdArgs).Run() func (self *CommitCommands) Revert(hash string, isMerge bool) error {
} cmdArgs := NewGitCmd("revert").
Arg(hash).
func (self *CommitCommands) RevertMerge(hash string, parentNumber int) error { ArgIf(isMerge, "-m", "1").
cmdArgs := NewGitCmd("revert").Arg(hash, "-m", fmt.Sprintf("%d", parentNumber)).
ToArgv() ToArgv()
return self.cmd.New(cmdArgs).Run() return self.cmd.New(cmdArgs).Run()

View file

@ -1,7 +1,6 @@
package controllers package controllers
import ( import (
"fmt"
"strings" "strings"
"github.com/go-errors/errors" "github.com/go-errors/errors"
@ -859,10 +858,6 @@ func (self *LocalCommitsController) addCoAuthor(start, end int) error {
} }
func (self *LocalCommitsController) revert(commit *models.Commit) error { func (self *LocalCommitsController) revert(commit *models.Commit) error {
if commit.IsMerge() {
return self.createRevertMergeCommitMenu(commit)
}
self.c.Confirm(types.ConfirmOpts{ self.c.Confirm(types.ConfirmOpts{
Title: self.c.Tr.Actions.RevertCommit, Title: self.c.Tr.Actions.RevertCommit,
Prompt: utils.ResolvePlaceholderString( Prompt: utils.ResolvePlaceholderString(
@ -873,7 +868,7 @@ func (self *LocalCommitsController) revert(commit *models.Commit) error {
HandleConfirm: func() error { HandleConfirm: func() error {
self.c.LogAction(self.c.Tr.Actions.RevertCommit) self.c.LogAction(self.c.Tr.Actions.RevertCommit)
return self.c.WithWaitingStatusSync(self.c.Tr.RevertingStatus, func() error { return self.c.WithWaitingStatusSync(self.c.Tr.RevertingStatus, func() error {
result := self.c.Git().Commit.Revert(commit.Hash) result := self.c.Git().Commit.Revert(commit.Hash, commit.IsMerge())
if err := self.c.Helpers().MergeAndRebase.CheckMergeOrRebase(result); err != nil { if err := self.c.Helpers().MergeAndRebase.CheckMergeOrRebase(result); err != nil {
return err return err
} }
@ -885,32 +880,6 @@ func (self *LocalCommitsController) revert(commit *models.Commit) error {
return nil return nil
} }
func (self *LocalCommitsController) createRevertMergeCommitMenu(commit *models.Commit) error {
menuItems := make([]*types.MenuItem, len(commit.Parents))
for i, parentHash := range commit.Parents {
message, err := self.c.Git().Commit.GetCommitMessageFirstLine(parentHash)
if err != nil {
return err
}
menuItems[i] = &types.MenuItem{
Label: fmt.Sprintf("%s: %s", utils.SafeTruncate(parentHash, 8), message),
OnPress: func() error {
parentNumber := i + 1
self.c.LogAction(self.c.Tr.Actions.RevertCommit)
return self.c.WithWaitingStatusSync(self.c.Tr.RevertingStatus, func() error {
if err := self.c.Git().Commit.RevertMerge(commit.Hash, parentNumber); err != nil {
return err
}
return self.afterRevertCommit()
})
},
}
}
return self.c.Menu(types.CreateMenuOptions{Title: self.c.Tr.SelectParentCommitForMerge, Items: menuItems})
}
func (self *LocalCommitsController) afterRevertCommit() error { func (self *LocalCommitsController) afterRevertCommit() error {
self.context().MoveSelection(1) self.context().MoveSelection(1)
return self.c.Refresh(types.RefreshOptions{ return self.c.Refresh(types.RefreshOptions{

View file

@ -727,7 +727,6 @@ type TranslationSet struct {
FocusCommandLog string FocusCommandLog string
CommandLogHeader string CommandLogHeader string
RandomTip string RandomTip string
SelectParentCommitForMerge string
ToggleWhitespaceInDiffView string ToggleWhitespaceInDiffView string
ToggleWhitespaceInDiffViewTooltip string ToggleWhitespaceInDiffViewTooltip string
IgnoreWhitespaceDiffViewSubTitle string IgnoreWhitespaceDiffViewSubTitle string
@ -1795,7 +1794,6 @@ func EnglishTranslationSet() *TranslationSet {
FocusCommandLog: "Focus command log", FocusCommandLog: "Focus command log",
CommandLogHeader: "You can hide/focus this panel by pressing '%s'\n", CommandLogHeader: "You can hide/focus this panel by pressing '%s'\n",
RandomTip: "Random tip", RandomTip: "Random tip",
SelectParentCommitForMerge: "Select parent commit for merge",
ToggleWhitespaceInDiffView: "Toggle whitespace", ToggleWhitespaceInDiffView: "Toggle whitespace",
ToggleWhitespaceInDiffViewTooltip: "Toggle whether or not whitespace changes are shown in the diff view.", ToggleWhitespaceInDiffViewTooltip: "Toggle whether or not whitespace changes are shown in the diff view.",
IgnoreWhitespaceDiffViewSubTitle: "(ignoring whitespace)", IgnoreWhitespaceDiffViewSubTitle: "(ignoring whitespace)",

View file

@ -21,14 +21,9 @@ var RevertMerge = NewIntegrationTest(NewIntegrationTestArgs{
). ).
Press(keys.Commits.RevertCommit) Press(keys.Commits.RevertCommit)
t.ExpectPopup().Menu(). t.ExpectPopup().Confirmation().
Title(Equals("Select parent commit for merge")). Title(Equals("Revert commit")).
Lines( Content(MatchesRegexp(`Are you sure you want to revert \w+?`)).
Contains("first change"),
Contains("second-change-branch unrelated change"),
Contains("Cancel"),
).
Select(Contains("first change")).
Confirm() Confirm()
t.Views().Commits().IsFocused(). t.Views().Commits().IsFocused().