mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-08-06 22:33:07 +02:00
Add new command "Checkout previous branch"
This commit is contained in:
@ -497,6 +497,7 @@ type KeybindingBranchesConfig struct {
|
|||||||
CopyPullRequestURL string `yaml:"copyPullRequestURL"`
|
CopyPullRequestURL string `yaml:"copyPullRequestURL"`
|
||||||
CheckoutBranchByName string `yaml:"checkoutBranchByName"`
|
CheckoutBranchByName string `yaml:"checkoutBranchByName"`
|
||||||
ForceCheckoutBranch string `yaml:"forceCheckoutBranch"`
|
ForceCheckoutBranch string `yaml:"forceCheckoutBranch"`
|
||||||
|
CheckoutPreviousBranch string `yaml:"checkoutPreviousBranch"`
|
||||||
RebaseBranch string `yaml:"rebaseBranch"`
|
RebaseBranch string `yaml:"rebaseBranch"`
|
||||||
RenameBranch string `yaml:"renameBranch"`
|
RenameBranch string `yaml:"renameBranch"`
|
||||||
MergeIntoCurrentBranch string `yaml:"mergeIntoCurrentBranch"`
|
MergeIntoCurrentBranch string `yaml:"mergeIntoCurrentBranch"`
|
||||||
@ -957,6 +958,7 @@ func GetDefaultConfig() *UserConfig {
|
|||||||
ViewPullRequestOptions: "O",
|
ViewPullRequestOptions: "O",
|
||||||
CheckoutBranchByName: "c",
|
CheckoutBranchByName: "c",
|
||||||
ForceCheckoutBranch: "F",
|
ForceCheckoutBranch: "F",
|
||||||
|
CheckoutPreviousBranch: "-",
|
||||||
RebaseBranch: "r",
|
RebaseBranch: "r",
|
||||||
RenameBranch: "R",
|
RenameBranch: "R",
|
||||||
MergeIntoCurrentBranch: "M",
|
MergeIntoCurrentBranch: "M",
|
||||||
|
@ -89,6 +89,11 @@ func (self *BranchesController) GetKeybindings(opts types.KeybindingsOpts) []*ty
|
|||||||
Description: self.c.Tr.CheckoutByName,
|
Description: self.c.Tr.CheckoutByName,
|
||||||
Tooltip: self.c.Tr.CheckoutByNameTooltip,
|
Tooltip: self.c.Tr.CheckoutByNameTooltip,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Key: opts.GetKey(opts.Config.Branches.CheckoutPreviousBranch),
|
||||||
|
Handler: self.checkoutPreviousBranch,
|
||||||
|
Description: self.c.Tr.CheckoutPreviousBranch,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
Key: opts.GetKey(opts.Config.Branches.ForceCheckoutBranch),
|
Key: opts.GetKey(opts.Config.Branches.ForceCheckoutBranch),
|
||||||
Handler: self.forceCheckout,
|
Handler: self.forceCheckout,
|
||||||
@ -483,6 +488,11 @@ func (self *BranchesController) forceCheckout() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *BranchesController) checkoutPreviousBranch() error {
|
||||||
|
self.c.LogAction(self.c.Tr.Actions.CheckoutBranch)
|
||||||
|
return self.c.Helpers().Refs.CheckoutRef("-", types.CheckoutRefOptions{})
|
||||||
|
}
|
||||||
|
|
||||||
func (self *BranchesController) checkoutByName() error {
|
func (self *BranchesController) checkoutByName() error {
|
||||||
self.c.Prompt(types.PromptOpts{
|
self.c.Prompt(types.PromptOpts{
|
||||||
Title: self.c.Tr.BranchName + ":",
|
Title: self.c.Tr.BranchName + ":",
|
||||||
|
@ -139,6 +139,7 @@ type TranslationSet struct {
|
|||||||
ForceCheckoutTooltip string
|
ForceCheckoutTooltip string
|
||||||
CheckoutByName string
|
CheckoutByName string
|
||||||
CheckoutByNameTooltip string
|
CheckoutByNameTooltip string
|
||||||
|
CheckoutPreviousBranch string
|
||||||
RemoteBranchCheckoutTitle string
|
RemoteBranchCheckoutTitle string
|
||||||
RemoteBranchCheckoutPrompt string
|
RemoteBranchCheckoutPrompt string
|
||||||
CheckoutTypeNewBranch string
|
CheckoutTypeNewBranch string
|
||||||
@ -1182,6 +1183,7 @@ func EnglishTranslationSet() *TranslationSet {
|
|||||||
ForceCheckoutTooltip: "Force checkout selected branch. This will discard all local changes in your working directory before checking out the selected branch.",
|
ForceCheckoutTooltip: "Force checkout selected branch. This will discard all local changes in your working directory before checking out the selected branch.",
|
||||||
CheckoutByName: "Checkout by name",
|
CheckoutByName: "Checkout by name",
|
||||||
CheckoutByNameTooltip: "Checkout by name. In the input box you can enter '-' to switch to the last branch.",
|
CheckoutByNameTooltip: "Checkout by name. In the input box you can enter '-' to switch to the last branch.",
|
||||||
|
CheckoutPreviousBranch: "Checkout previous branch",
|
||||||
RemoteBranchCheckoutTitle: "Checkout {{.branchName}}",
|
RemoteBranchCheckoutTitle: "Checkout {{.branchName}}",
|
||||||
RemoteBranchCheckoutPrompt: "How would you like to check out this branch?",
|
RemoteBranchCheckoutPrompt: "How would you like to check out this branch?",
|
||||||
CheckoutTypeNewBranch: "New local branch",
|
CheckoutTypeNewBranch: "New local branch",
|
||||||
|
51
pkg/integration/tests/branch/checkout_previous_branch.go
Normal file
51
pkg/integration/tests/branch/checkout_previous_branch.go
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package branch
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/jesseduffield/lazygit/pkg/config"
|
||||||
|
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
||||||
|
)
|
||||||
|
|
||||||
|
var CheckoutPreviousBranch = NewIntegrationTest(NewIntegrationTestArgs{
|
||||||
|
Description: "Checkout to the previous branch using the checkout previous branch functionality",
|
||||||
|
ExtraCmdArgs: []string{},
|
||||||
|
Skip: false,
|
||||||
|
SetupConfig: func(config *config.AppConfig) {},
|
||||||
|
SetupRepo: func(shell *Shell) {
|
||||||
|
shell.
|
||||||
|
CreateNCommits(3).
|
||||||
|
NewBranch("previous-branch").
|
||||||
|
EmptyCommit("previous commit").
|
||||||
|
Checkout("master").
|
||||||
|
EmptyCommit("master commit")
|
||||||
|
},
|
||||||
|
Run: func(t *TestDriver, keys config.KeybindingConfig) {
|
||||||
|
t.Views().Branches().
|
||||||
|
Focus().
|
||||||
|
Lines(
|
||||||
|
Contains("master").IsSelected(),
|
||||||
|
Contains("previous-branch"),
|
||||||
|
)
|
||||||
|
|
||||||
|
// Press the checkout previous branch key (should checkout previous-branch)
|
||||||
|
t.Views().Branches().
|
||||||
|
Press(keys.Branches.CheckoutPreviousBranch).
|
||||||
|
Lines(
|
||||||
|
Contains("previous-branch").IsSelected(),
|
||||||
|
Contains("master"),
|
||||||
|
)
|
||||||
|
|
||||||
|
// Verify we're on previous-branch
|
||||||
|
t.Git().CurrentBranchName("previous-branch")
|
||||||
|
|
||||||
|
// Press again to go back to master
|
||||||
|
t.Views().Branches().
|
||||||
|
Press(keys.Branches.CheckoutPreviousBranch).
|
||||||
|
Lines(
|
||||||
|
Contains("master").IsSelected(),
|
||||||
|
Contains("previous-branch"),
|
||||||
|
)
|
||||||
|
|
||||||
|
// Verify we're back on master
|
||||||
|
t.Git().CurrentBranchName("master")
|
||||||
|
},
|
||||||
|
})
|
@ -40,6 +40,7 @@ var tests = []*components.IntegrationTest{
|
|||||||
bisect.Skip,
|
bisect.Skip,
|
||||||
branch.CheckoutAutostash,
|
branch.CheckoutAutostash,
|
||||||
branch.CheckoutByName,
|
branch.CheckoutByName,
|
||||||
|
branch.CheckoutPreviousBranch,
|
||||||
branch.CreateTag,
|
branch.CreateTag,
|
||||||
branch.Delete,
|
branch.Delete,
|
||||||
branch.DeleteMultiple,
|
branch.DeleteMultiple,
|
||||||
|
Reference in New Issue
Block a user