summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pkg/commands/git.go14
-rw-r--r--pkg/commands/git_test.go8
-rw-r--r--pkg/gui/files_panel.go13
-rw-r--r--pkg/i18n/english.go3
4 files changed, 25 insertions, 13 deletions
diff --git a/pkg/commands/git.go b/pkg/commands/git.go
index 08eb78edf..ab71f80e3 100644
--- a/pkg/commands/git.go
+++ b/pkg/commands/git.go
@@ -265,7 +265,7 @@ func includesInt(list []int, a int) bool {
// ResetAndClean removes all unstaged changes and removes all untracked files
func (c *GitCommand) ResetAndClean() error {
- if err := c.ResetHardHead(); err != nil {
+ if err := c.ResetHard("HEAD"); err != nil {
return err
}
@@ -961,14 +961,14 @@ func (c *GitCommand) RemoveUntrackedFiles() error {
return c.OSCommand.RunCommand("git clean -fd")
}
-// ResetHardHead runs `git reset --hard HEAD`
-func (c *GitCommand) ResetHardHead() error {
- return c.OSCommand.RunCommand("git reset --hard HEAD")
+// ResetHardHead runs `git reset --hard`
+func (c *GitCommand) ResetHard(ref string) error {
+ return c.OSCommand.RunCommand("git reset --hard " + ref)
}
-// ResetSoftHead runs `git reset --soft HEAD`
-func (c *GitCommand) ResetSoftHead() error {
- return c.OSCommand.RunCommand("git reset --soft HEAD")
+// ResetSoft runs `git reset --soft HEAD`
+func (c *GitCommand) ResetSoft(ref string) error {
+ return c.OSCommand.RunCommand("git reset --soft " + ref)
}
// DiffCommits show diff between commits
diff --git a/pkg/commands/git_test.go b/pkg/commands/git_test.go
index 4991714f1..0429165de 100644
--- a/pkg/commands/git_test.go
+++ b/pkg/commands/git_test.go
@@ -2106,10 +2106,11 @@ func TestGitCommandRemoveUntrackedFiles(t *testing.T) {
}
}
-// TestGitCommandResetHardHead is a function.
-func TestGitCommandResetHardHead(t *testing.T) {
+// TestGitCommandResetHard is a function.
+func TestGitCommandResetHard(t *testing.T) {
type scenario struct {
testName string
+ ref string
command func(string, ...string) *exec.Cmd
test func(error)
}
@@ -2117,6 +2118,7 @@ func TestGitCommandResetHardHead(t *testing.T) {
scenarios := []scenario{
{
"valid case",
+ "HEAD",
test.CreateMockCommand(t, []*test.CommandSwapper{
{
Expect: `git reset --hard HEAD`,
@@ -2134,7 +2136,7 @@ func TestGitCommandResetHardHead(t *testing.T) {
for _, s := range scenarios {
t.Run(s.testName, func(t *testing.T) {
gitCmd.OSCommand.command = s.command
- s.test(gitCmd.ResetHardHead())
+ s.test(gitCmd.ResetHard(s.ref))
})
}
}
diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go
index 463db817e..aa2e8592e 100644
--- a/pkg/gui/files_panel.go
+++ b/pkg/gui/files_panel.go
@@ -604,14 +604,21 @@ func (gui *Gui) handleCreateResetMenu(g *gocui.Gui, v *gocui.View) error {
description: gui.Tr.SLocalize("softReset"),
command: "git reset --soft HEAD",
handler: func() error {
- return gui.GitCommand.ResetSoftHead()
+ return gui.GitCommand.ResetSoft("HEAD")
},
},
{
description: gui.Tr.SLocalize("hardReset"),
command: "git reset --hard HEAD",
handler: func() error {
- return gui.GitCommand.ResetHardHead()
+ return gui.GitCommand.ResetHard("HEAD")
+ },
+ },
+ {
+ description: gui.Tr.SLocalize("hardResetUpstream"),
+ command: "git reset --hard @{upstream}",
+ handler: func() error {
+ return gui.GitCommand.ResetHard("@{upstream}")
},
},
{
@@ -624,7 +631,7 @@ func (gui *Gui) handleCreateResetMenu(g *gocui.Gui, v *gocui.View) error {
handleMenuPress := func(index int) error {
if err := options[index].handler(); err != nil {
- return err
+ return gui.createErrorPanel(gui.g, err.Error())
}
return gui.refreshFiles()
diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go
index 55a607090..c6c423285 100644
--- a/pkg/i18n/english.go
+++ b/pkg/i18n/english.go
@@ -754,6 +754,9 @@ func addEnglish(i18nObject *i18n.Bundle) error {
ID: "hardReset",
Other: "hard reset",
}, &i18n.Message{
+ ID: "hardResetUpstream",
+ Other: "hard reset to upstream branch",
+ }, &i18n.Message{
ID: "viewResetOptions",
Other: `view reset options`,
}, &i18n.Message{