mirror of
https://github.com/jesseduffield/lazygit.git
synced 2026-09-10 15:46:26 -04:00
fix(rebase): correct parent commit selection logic when git.log.showWholeGraph=true
- Able to accurately select the parent commit now, preventing incorrect operations on merge commits and complex histories. - Updated method signatures to accept a parent commit index for precise targeting. - Improved english confirmation prompts and translations to clarify actions affect the parent commit below. - Fixed: squash "s", drop "d", reword "r/R", discard "d", edit/interactive-rebase "e", fixup "f", amend "a/A, patch "Ctrl-P" - Not yet fixed: interative-rebase "i" fix: GetParentCommit edge cases
This commit is contained in:
parent
2f6d20275a
commit
461e7cd53b
|
|
@ -88,8 +88,8 @@ func (self *PatchCommands) SaveTemporaryPatch(patch string) (string, error) {
|
|||
}
|
||||
|
||||
// DeletePatchesFromCommit applies a patch in reverse for a commit
|
||||
func (self *PatchCommands) DeletePatchesFromCommit(commits []*models.Commit, commitIndex int) error {
|
||||
if err := self.rebase.BeginInteractiveRebaseForCommit(commits, commitIndex, false); err != nil {
|
||||
func (self *PatchCommands) DeletePatchesFromCommit(commits []*models.Commit, commitIndex int, parentIdx int) error {
|
||||
if err := self.rebase.BeginInteractiveRebaseForCommit(commits, commitIndex, parentIdx, false); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
@ -113,12 +113,12 @@ func (self *PatchCommands) DeletePatchesFromCommit(commits []*models.Commit, com
|
|||
return self.rebase.ContinueRebase()
|
||||
}
|
||||
|
||||
func (self *PatchCommands) MovePatchToSelectedCommit(commits []*models.Commit, sourceCommitIdx int, destinationCommitIdx int) error {
|
||||
func (self *PatchCommands) MovePatchToSelectedCommit(commits []*models.Commit, sourceCommitIdx int, destinationCommitIdx int, parentIdx int) error {
|
||||
if sourceCommitIdx < destinationCommitIdx {
|
||||
// Passing true for keepCommitsThatBecomeEmpty: if the moved-from
|
||||
// commit becomes empty, we want to keep it, mainly for consistency with
|
||||
// moving the patch to a *later* commit, which behaves the same.
|
||||
if err := self.rebase.BeginInteractiveRebaseForCommit(commits, destinationCommitIdx, true); err != nil {
|
||||
if err := self.rebase.BeginInteractiveRebaseForCommit(commits, destinationCommitIdx, parentIdx, true); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
@ -217,14 +217,14 @@ func (self *PatchCommands) MovePatchToSelectedCommit(commits []*models.Commit, s
|
|||
return self.rebase.ContinueRebase()
|
||||
}
|
||||
|
||||
func (self *PatchCommands) MovePatchIntoIndex(commits []*models.Commit, commitIdx int, stash bool) error {
|
||||
func (self *PatchCommands) MovePatchIntoIndex(commits []*models.Commit, commitIdx int, parentIdx int, stash bool) error {
|
||||
if stash {
|
||||
if err := self.stash.Push(fmt.Sprintf(self.Tr.AutoStashForMovingPatchToIndex, commits[commitIdx].ShortHash())); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if err := self.rebase.BeginInteractiveRebaseForCommit(commits, commitIdx, false); err != nil {
|
||||
if err := self.rebase.BeginInteractiveRebaseForCommit(commits, commitIdx, parentIdx, false); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
@ -275,10 +275,11 @@ func (self *PatchCommands) MovePatchIntoIndex(commits []*models.Commit, commitId
|
|||
func (self *PatchCommands) PullPatchIntoNewCommit(
|
||||
commits []*models.Commit,
|
||||
commitIdx int,
|
||||
parentIdx int,
|
||||
commitSummary string,
|
||||
commitDescription string,
|
||||
) error {
|
||||
if err := self.rebase.BeginInteractiveRebaseForCommit(commits, commitIdx, false); err != nil {
|
||||
if err := self.rebase.BeginInteractiveRebaseForCommit(commits, commitIdx, parentIdx, false); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
@ -318,10 +319,11 @@ func (self *PatchCommands) PullPatchIntoNewCommit(
|
|||
func (self *PatchCommands) PullPatchIntoNewCommitBefore(
|
||||
commits []*models.Commit,
|
||||
commitIdx int,
|
||||
parentIdx int,
|
||||
commitSummary string,
|
||||
commitDescription string,
|
||||
) error {
|
||||
if err := self.rebase.BeginInteractiveRebaseForCommit(commits, commitIdx+1, true); err != nil {
|
||||
if err := self.rebase.BeginInteractiveRebaseForCommit(commits, commitIdx+1, parentIdx, true); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,14 +34,14 @@ func NewRebaseCommands(
|
|||
}
|
||||
}
|
||||
|
||||
func (self *RebaseCommands) RewordCommit(commits []*models.Commit, index int, summary string, description string) error {
|
||||
func (self *RebaseCommands) RewordCommit(commits []*models.Commit, index int, parentIdx int, summary string, description string) error {
|
||||
// This check is currently unreachable (handled in LocalCommitsController.reword),
|
||||
// but kept as a safeguard in case this method is used elsewhere.
|
||||
if self.config.NeedsGpgSubprocessForCommit() {
|
||||
return errors.New(self.Tr.DisabledForGPG)
|
||||
}
|
||||
|
||||
err := self.BeginInteractiveRebaseForCommit(commits, index, false)
|
||||
err := self.BeginInteractiveRebaseForCommit(commits, index, parentIdx, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -55,7 +55,7 @@ func (self *RebaseCommands) RewordCommit(commits []*models.Commit, index int, su
|
|||
return self.ContinueRebase()
|
||||
}
|
||||
|
||||
func (self *RebaseCommands) RewordCommitInEditor(commits []*models.Commit, index int) (*oscommands.CmdObj, error) {
|
||||
func (self *RebaseCommands) RewordCommitInEditor(commits []*models.Commit, index int, parentIdx int) (*oscommands.CmdObj, error) {
|
||||
changes := []daemon.ChangeTodoAction{{
|
||||
Hash: commits[index].Hash(),
|
||||
NewAction: todo.Reword,
|
||||
|
|
@ -63,36 +63,36 @@ func (self *RebaseCommands) RewordCommitInEditor(commits []*models.Commit, index
|
|||
self.os.LogCommand(logTodoChanges(changes), false)
|
||||
|
||||
return self.PrepareInteractiveRebaseCommand(PrepareInteractiveRebaseCommandOpts{
|
||||
baseHashOrRoot: getBaseHashOrRoot(commits, index+1),
|
||||
baseHashOrRoot: getBaseHashOrRoot(commits, parentIdx),
|
||||
instruction: daemon.NewChangeTodoActionsInstruction(changes),
|
||||
}), nil
|
||||
}
|
||||
|
||||
func (self *RebaseCommands) ResetCommitAuthor(commits []*models.Commit, start, end int) error {
|
||||
return self.GenericAmend(commits, start, end, func(_ *models.Commit) error {
|
||||
func (self *RebaseCommands) ResetCommitAuthor(commits []*models.Commit, start, end int, parentIdx int) error {
|
||||
return self.GenericAmend(commits, start, end, parentIdx, func(_ *models.Commit) error {
|
||||
return self.commit.ResetAuthor()
|
||||
})
|
||||
}
|
||||
|
||||
func (self *RebaseCommands) SetCommitAuthor(commits []*models.Commit, start, end int, value string) error {
|
||||
return self.GenericAmend(commits, start, end, func(_ *models.Commit) error {
|
||||
func (self *RebaseCommands) SetCommitAuthor(commits []*models.Commit, start, end int, parentIdx int, value string) error {
|
||||
return self.GenericAmend(commits, start, end, parentIdx, func(_ *models.Commit) error {
|
||||
return self.commit.SetAuthor(value)
|
||||
})
|
||||
}
|
||||
|
||||
func (self *RebaseCommands) AddCommitCoAuthor(commits []*models.Commit, start, end int, value string) error {
|
||||
return self.GenericAmend(commits, start, end, func(commit *models.Commit) error {
|
||||
func (self *RebaseCommands) AddCommitCoAuthor(commits []*models.Commit, start, end int, parentIdx int, value string) error {
|
||||
return self.GenericAmend(commits, start, end, parentIdx, func(commit *models.Commit) error {
|
||||
return self.commit.AddCoAuthor(commit.Hash(), value)
|
||||
})
|
||||
}
|
||||
|
||||
func (self *RebaseCommands) GenericAmend(commits []*models.Commit, start, end int, f func(commit *models.Commit) error) error {
|
||||
func (self *RebaseCommands) GenericAmend(commits []*models.Commit, start, end int, parentIdx int, f func(commit *models.Commit) error) error {
|
||||
if start == end && models.IsHeadCommit(commits, start) {
|
||||
// we've selected the top commit so no rebase is required
|
||||
return f(commits[start])
|
||||
}
|
||||
|
||||
err := self.BeginInteractiveRebaseForCommitRange(commits, start, end, false)
|
||||
err := self.BeginInteractiveRebaseForCommitRange(commits, start, end, parentIdx, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -139,13 +139,8 @@ func (self *RebaseCommands) MoveCommitsUp(commits []*models.Commit, startIdx int
|
|||
}).Run()
|
||||
}
|
||||
|
||||
func (self *RebaseCommands) InteractiveRebase(commits []*models.Commit, startIdx int, endIdx int, action todo.TodoCommand, flag string) error {
|
||||
baseIndex := endIdx + 1
|
||||
if action == todo.Squash || action == todo.Fixup {
|
||||
baseIndex++
|
||||
}
|
||||
|
||||
baseHashOrRoot := getBaseHashOrRoot(commits, baseIndex)
|
||||
func (self *RebaseCommands) InteractiveRebase(commits []*models.Commit, startIdx int, endIdx int, parentIdx int, action todo.TodoCommand, flag string) error {
|
||||
baseHashOrRoot := getBaseHashOrRoot(commits, parentIdx)
|
||||
|
||||
changes := lo.FilterMap(commits[startIdx:endIdx+1], func(commit *models.Commit, _ int) (daemon.ChangeTodoAction, bool) {
|
||||
return daemon.ChangeTodoAction{
|
||||
|
|
@ -295,7 +290,7 @@ func (self *RebaseCommands) getHashOfLastCommitMade() (string, error) {
|
|||
}
|
||||
|
||||
// AmendTo amends the given commit with whatever files are staged
|
||||
func (self *RebaseCommands) AmendTo(commits []*models.Commit, commitIndex int) error {
|
||||
func (self *RebaseCommands) AmendTo(commits []*models.Commit, commitIndex int, parentIdx int) error {
|
||||
commit := commits[commitIndex]
|
||||
|
||||
if err := self.commit.CreateFixupCommit(commit.Hash()); err != nil {
|
||||
|
|
@ -308,7 +303,7 @@ func (self *RebaseCommands) AmendTo(commits []*models.Commit, commitIndex int) e
|
|||
}
|
||||
|
||||
return self.PrepareInteractiveRebaseCommand(PrepareInteractiveRebaseCommandOpts{
|
||||
baseHashOrRoot: getBaseHashOrRoot(commits, commitIndex+1),
|
||||
baseHashOrRoot: getBaseHashOrRoot(commits, parentIdx),
|
||||
overrideEditor: true,
|
||||
instruction: daemon.NewMoveFixupCommitDownInstruction(commit.Hash(), fixupHash, true),
|
||||
}).Run()
|
||||
|
|
@ -403,7 +398,7 @@ func (self *RebaseCommands) SquashAllAboveFixupCommits(commit *models.Commit) er
|
|||
// BeginInteractiveRebaseForCommit starts an interactive rebase to edit the current
|
||||
// commit and pick all others. After this you'll want to call `self.ContinueRebase()
|
||||
func (self *RebaseCommands) BeginInteractiveRebaseForCommit(
|
||||
commits []*models.Commit, commitIndex int, keepCommitsThatBecomeEmpty bool,
|
||||
commits []*models.Commit, commitIndex int, parentIdx int, keepCommitsThatBecomeEmpty bool,
|
||||
) error {
|
||||
if commitIndex < len(commits) && commits[commitIndex].IsMerge() {
|
||||
if self.config.NeedsGpgSubprocessForCommit() {
|
||||
|
|
@ -417,11 +412,11 @@ func (self *RebaseCommands) BeginInteractiveRebaseForCommit(
|
|||
}).Run()
|
||||
}
|
||||
|
||||
return self.BeginInteractiveRebaseForCommitRange(commits, commitIndex, commitIndex, keepCommitsThatBecomeEmpty)
|
||||
return self.BeginInteractiveRebaseForCommitRange(commits, commitIndex, commitIndex, parentIdx, keepCommitsThatBecomeEmpty)
|
||||
}
|
||||
|
||||
func (self *RebaseCommands) BeginInteractiveRebaseForCommitRange(
|
||||
commits []*models.Commit, start, end int, keepCommitsThatBecomeEmpty bool,
|
||||
commits []*models.Commit, start, end int, parentIdx int, keepCommitsThatBecomeEmpty bool,
|
||||
) error {
|
||||
if len(commits)-1 < end {
|
||||
return errors.New("index outside of range of commits")
|
||||
|
|
@ -444,7 +439,7 @@ func (self *RebaseCommands) BeginInteractiveRebaseForCommitRange(
|
|||
self.os.LogCommand(logTodoChanges(changes), false)
|
||||
|
||||
return self.PrepareInteractiveRebaseCommand(PrepareInteractiveRebaseCommandOpts{
|
||||
baseHashOrRoot: getBaseHashOrRoot(commits, end+1),
|
||||
baseHashOrRoot: getBaseHashOrRoot(commits, parentIdx),
|
||||
overrideEditor: true,
|
||||
keepCommitsThatBecomeEmpty: keepCommitsThatBecomeEmpty,
|
||||
instruction: daemon.NewChangeTodoActionsInstruction(changes),
|
||||
|
|
@ -517,8 +512,8 @@ func (self *RebaseCommands) runSkipEditorCommand(cmdObj *oscommands.CmdObj) erro
|
|||
}
|
||||
|
||||
// DiscardOldFileChanges discards changes to a file from an old commit
|
||||
func (self *RebaseCommands) DiscardOldFileChanges(commits []*models.Commit, commitIndex int, filePaths []string) error {
|
||||
if err := self.BeginInteractiveRebaseForCommit(commits, commitIndex, false); err != nil {
|
||||
func (self *RebaseCommands) DiscardOldFileChanges(commits []*models.Commit, commitIndex int, parentIdx int, filePaths []string) error {
|
||||
if err := self.BeginInteractiveRebaseForCommit(commits, commitIndex, parentIdx, false); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -100,6 +100,7 @@ func TestRebaseDiscardOldFileChanges(t *testing.T) {
|
|||
gitConfigMockResponses map[string]string
|
||||
commitOpts []models.NewCommitOpts
|
||||
commitIndex int
|
||||
parentIndex int
|
||||
fileName []string
|
||||
runner *oscommands.FakeCmdObjRunner
|
||||
test func(error)
|
||||
|
|
@ -111,6 +112,7 @@ func TestRebaseDiscardOldFileChanges(t *testing.T) {
|
|||
gitConfigMockResponses: nil,
|
||||
commitOpts: []models.NewCommitOpts{},
|
||||
commitIndex: 0,
|
||||
parentIndex: 0,
|
||||
fileName: []string{"test999.txt"},
|
||||
runner: oscommands.NewFakeRunner(t),
|
||||
test: func(err error) {
|
||||
|
|
@ -122,6 +124,7 @@ func TestRebaseDiscardOldFileChanges(t *testing.T) {
|
|||
gitConfigMockResponses: map[string]string{"commit.gpgSign": "true"},
|
||||
commitOpts: []models.NewCommitOpts{{Name: "commit", Hash: "123456"}},
|
||||
commitIndex: 0,
|
||||
parentIndex: 0,
|
||||
fileName: []string{"test999.txt"},
|
||||
runner: oscommands.NewFakeRunner(t),
|
||||
test: func(err error) {
|
||||
|
|
@ -136,6 +139,7 @@ func TestRebaseDiscardOldFileChanges(t *testing.T) {
|
|||
{Name: "commit2", Hash: "abcdef"},
|
||||
},
|
||||
commitIndex: 0,
|
||||
parentIndex: 1,
|
||||
fileName: []string{"test999.txt"},
|
||||
runner: oscommands.NewFakeRunner(t).
|
||||
ExpectGitArgs([]string{"rebase", "--interactive", "--autostash", "--keep-empty", "--no-autosquash", "--rebase-merges", "abcdef"}, "", nil).
|
||||
|
|
@ -163,7 +167,7 @@ func TestRebaseDiscardOldFileChanges(t *testing.T) {
|
|||
commits := lo.Map(s.commitOpts,
|
||||
func(opts models.NewCommitOpts, _ int) *models.Commit { return models.NewCommit(hashPool, opts) })
|
||||
|
||||
s.test(instance.DiscardOldFileChanges(commits, s.commitIndex, s.fileName))
|
||||
s.test(instance.DiscardOldFileChanges(commits, s.commitIndex, s.parentIndex, s.fileName))
|
||||
s.runner.CheckForMissingCalls()
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -326,7 +326,10 @@ func (self *CommitFilesController) discard(selectedNodes []*filetree.CommitFileN
|
|||
})
|
||||
}
|
||||
|
||||
err := self.c.Git().Rebase.DiscardOldFileChanges(self.c.Model().Commits, self.c.Contexts().LocalCommits.GetSelectedLineIdx(), filePaths)
|
||||
selectedCommits, _, endIdx := self.c.Contexts().LocalCommits.GetSelectedItems()
|
||||
_, parentIdx := self.c.Helpers().Commits.GetParentCommit(selectedCommits, endIdx, 1)
|
||||
|
||||
err := self.c.Git().Rebase.DiscardOldFileChanges(self.c.Model().Commits, self.c.Contexts().LocalCommits.GetSelectedLineIdx(), parentIdx, filePaths)
|
||||
if err := self.c.Helpers().MergeAndRebase.CheckMergeOrRebase(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -134,8 +134,10 @@ func (self *CustomPatchOptionsMenuAction) handleDeletePatchFromCommit() error {
|
|||
|
||||
return self.c.WithWaitingStatus(self.c.Tr.RebasingStatus, func(gocui.Task) error {
|
||||
commitIndex := self.getPatchCommitIndex()
|
||||
selectedCommits, _, endIdx := self.c.Contexts().LocalCommits.GetSelectedItems()
|
||||
_, parentIdx := self.c.Helpers().Commits.GetParentCommit(selectedCommits, endIdx, 1)
|
||||
self.c.LogAction(self.c.Tr.Actions.RemovePatchFromCommit)
|
||||
err := self.c.Git().Patch.DeletePatchesFromCommit(self.c.Model().Commits, commitIndex)
|
||||
err := self.c.Git().Patch.DeletePatchesFromCommit(self.c.Model().Commits, commitIndex, parentIdx)
|
||||
return self.c.Helpers().MergeAndRebase.CheckMergeOrRebase(err)
|
||||
})
|
||||
}
|
||||
|
|
@ -145,8 +147,10 @@ func (self *CustomPatchOptionsMenuAction) handleMovePatchToSelectedCommit() erro
|
|||
|
||||
return self.c.WithWaitingStatus(self.c.Tr.RebasingStatus, func(gocui.Task) error {
|
||||
commitIndex := self.getPatchCommitIndex()
|
||||
selectedCommits, _, endIdx := self.c.Contexts().LocalCommits.GetSelectedItems()
|
||||
_, parentIdx := self.c.Helpers().Commits.GetParentCommit(selectedCommits, endIdx, 1)
|
||||
self.c.LogAction(self.c.Tr.Actions.MovePatchToSelectedCommit)
|
||||
err := self.c.Git().Patch.MovePatchToSelectedCommit(self.c.Model().Commits, commitIndex, self.c.Contexts().LocalCommits.GetSelectedLineIdx())
|
||||
err := self.c.Git().Patch.MovePatchToSelectedCommit(self.c.Model().Commits, commitIndex, self.c.Contexts().LocalCommits.GetSelectedLineIdx(), parentIdx)
|
||||
return self.c.Helpers().MergeAndRebase.CheckMergeOrRebase(err)
|
||||
})
|
||||
}
|
||||
|
|
@ -161,8 +165,10 @@ func (self *CustomPatchOptionsMenuAction) handleMovePatchIntoWorkingTree() error
|
|||
HandleConfirm: func() error {
|
||||
return self.c.WithWaitingStatus(self.c.Tr.RebasingStatus, func(gocui.Task) error {
|
||||
commitIndex := self.getPatchCommitIndex()
|
||||
selectedCommits, _, endIdx := self.c.Contexts().LocalCommits.GetSelectedItems()
|
||||
_, parentIdx := self.c.Helpers().Commits.GetParentCommit(selectedCommits, endIdx, 1)
|
||||
self.c.LogAction(self.c.Tr.Actions.MovePatchIntoIndex)
|
||||
err := self.c.Git().Patch.MovePatchIntoIndex(self.c.Model().Commits, commitIndex, mustStash)
|
||||
err := self.c.Git().Patch.MovePatchIntoIndex(self.c.Model().Commits, commitIndex, parentIdx, mustStash)
|
||||
return self.c.Helpers().MergeAndRebase.CheckMergeOrRebase(err)
|
||||
})
|
||||
},
|
||||
|
|
@ -173,6 +179,8 @@ func (self *CustomPatchOptionsMenuAction) handlePullPatchIntoNewCommit() error {
|
|||
self.returnFocusFromPatchExplorerIfNecessary()
|
||||
|
||||
commitIndex := self.getPatchCommitIndex()
|
||||
selectedCommits, _, endIdx := self.c.Contexts().LocalCommits.GetSelectedItems()
|
||||
_, parentIdx := self.c.Helpers().Commits.GetParentCommit(selectedCommits, endIdx, 1)
|
||||
self.c.Helpers().Commits.OpenCommitMessagePanel(
|
||||
&helpers.OpenCommitMessagePanelOpts{
|
||||
// Pass a commit index of one less than the moved-from commit, so that
|
||||
|
|
@ -186,7 +194,7 @@ func (self *CustomPatchOptionsMenuAction) handlePullPatchIntoNewCommit() error {
|
|||
return self.c.WithWaitingStatus(self.c.Tr.RebasingStatus, func(gocui.Task) error {
|
||||
self.c.Helpers().Commits.CloseCommitMessagePanel()
|
||||
self.c.LogAction(self.c.Tr.Actions.MovePatchIntoNewCommit)
|
||||
err := self.c.Git().Patch.PullPatchIntoNewCommit(self.c.Model().Commits, commitIndex, summary, description)
|
||||
err := self.c.Git().Patch.PullPatchIntoNewCommit(self.c.Model().Commits, commitIndex, parentIdx, summary, description)
|
||||
if err := self.c.Helpers().MergeAndRebase.CheckMergeOrRebase(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -204,6 +212,8 @@ func (self *CustomPatchOptionsMenuAction) handlePullPatchIntoNewCommitBefore() e
|
|||
self.returnFocusFromPatchExplorerIfNecessary()
|
||||
|
||||
commitIndex := self.getPatchCommitIndex()
|
||||
selectedCommits, _, endIdx := self.c.Contexts().LocalCommits.GetSelectedItems()
|
||||
_, parentIdx := self.c.Helpers().Commits.GetParentCommit(selectedCommits, endIdx, 2)
|
||||
self.c.Helpers().Commits.OpenCommitMessagePanel(
|
||||
&helpers.OpenCommitMessagePanelOpts{
|
||||
// Pass a commit index of one less than the moved-from commit, so that
|
||||
|
|
@ -217,7 +227,7 @@ func (self *CustomPatchOptionsMenuAction) handlePullPatchIntoNewCommitBefore() e
|
|||
return self.c.WithWaitingStatus(self.c.Tr.RebasingStatus, func(gocui.Task) error {
|
||||
self.c.Helpers().Commits.CloseCommitMessagePanel()
|
||||
self.c.LogAction(self.c.Tr.Actions.MovePatchIntoNewCommit)
|
||||
err := self.c.Git().Patch.PullPatchIntoNewCommitBefore(self.c.Model().Commits, commitIndex, summary, description)
|
||||
err := self.c.Git().Patch.PullPatchIntoNewCommitBefore(self.c.Model().Commits, commitIndex, parentIdx, summary, description)
|
||||
if err := self.c.Helpers().MergeAndRebase.CheckMergeOrRebase(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import (
|
|||
|
||||
"github.com/jesseduffield/gocui"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/git_commands"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
||||
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
|
@ -229,6 +230,39 @@ func (self *CommitsHelper) OpenCommitMenu(suggestionFunc func(string) []*types.S
|
|||
})
|
||||
}
|
||||
|
||||
func (self *CommitsHelper) GetParentCommit(selectedCommits []*models.Commit, endIdx int, depth int) (*models.Commit, int) {
|
||||
commits := self.c.Model().Commits
|
||||
|
||||
currentCommit := selectedCommits[len(selectedCommits)-1]
|
||||
parentIndex := endIdx
|
||||
var parentCommit *models.Commit
|
||||
|
||||
for d := 0; d < depth; d++ {
|
||||
selectedParents := currentCommit.Parents()
|
||||
if len(selectedParents) == 0 {
|
||||
self.c.Log.Warn("Selected commit has no parents, the nearest commit is used")
|
||||
return commits[parentIndex], parentIndex + 1
|
||||
}
|
||||
parentHash := selectedParents[0]
|
||||
found := false
|
||||
for i, commit := range commits {
|
||||
if commit.Hash() == parentHash {
|
||||
parentIndex = i
|
||||
parentCommit = commits[parentIndex]
|
||||
currentCommit = parentCommit
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
self.c.Log.Warnf("Parent commit %s not found in visible commit list, the nearest commit is used ", parentHash)
|
||||
return commits[parentIndex], parentIndex + 1
|
||||
}
|
||||
}
|
||||
|
||||
return parentCommit, parentIndex
|
||||
}
|
||||
|
||||
func (self *CommitsHelper) addCoAuthor(suggestionFunc func(string) []*types.Suggestion) error {
|
||||
self.c.Prompt(types.PromptOpts{
|
||||
Title: self.c.Tr.AddCoAuthorPromptTitle,
|
||||
|
|
|
|||
|
|
@ -311,13 +311,15 @@ func (self *LocalCommitsController) squashDown(selectedCommits []*models.Commit,
|
|||
return self.updateTodos(todo.Squash, selectedCommits)
|
||||
}
|
||||
|
||||
_, parentIdx := self.c.Helpers().Commits.GetParentCommit(selectedCommits, endIdx, 1)
|
||||
|
||||
self.c.Confirm(types.ConfirmOpts{
|
||||
Title: self.c.Tr.Squash,
|
||||
Prompt: self.c.Tr.SureSquashThisCommit,
|
||||
HandleConfirm: func() error {
|
||||
return self.c.WithWaitingStatus(self.c.Tr.SquashingStatus, func(gocui.Task) error {
|
||||
self.c.LogAction(self.c.Tr.Actions.SquashCommitDown)
|
||||
return self.interactiveRebase(todo.Squash, startIdx, endIdx)
|
||||
return self.interactiveRebase(todo.Squash, startIdx, endIdx, parentIdx)
|
||||
})
|
||||
},
|
||||
})
|
||||
|
|
@ -329,6 +331,7 @@ func (self *LocalCommitsController) fixup(selectedCommits []*models.Commit, star
|
|||
if self.isRebasing() {
|
||||
return self.updateTodos(todo.Fixup, selectedCommits)
|
||||
}
|
||||
_, parentIdx := self.c.Helpers().Commits.GetParentCommit(selectedCommits, endIdx, 1)
|
||||
|
||||
return self.c.Menu(types.CreateMenuOptions{
|
||||
Title: self.c.Tr.Fixup,
|
||||
|
|
@ -339,7 +342,7 @@ func (self *LocalCommitsController) fixup(selectedCommits []*models.Commit, star
|
|||
OnPress: func() error {
|
||||
return self.c.WithWaitingStatus(self.c.Tr.FixingStatus, func(gocui.Task) error {
|
||||
self.c.LogAction(self.c.Tr.Actions.FixupCommit)
|
||||
return self.interactiveRebase(todo.Fixup, startIdx, endIdx)
|
||||
return self.interactiveRebase(todo.Fixup, startIdx, endIdx, parentIdx)
|
||||
})
|
||||
},
|
||||
Tooltip: self.c.Tr.FixupTooltip,
|
||||
|
|
@ -350,7 +353,7 @@ func (self *LocalCommitsController) fixup(selectedCommits []*models.Commit, star
|
|||
OnPress: func() error {
|
||||
return self.c.WithWaitingStatus(self.c.Tr.FixingStatus, func(gocui.Task) error {
|
||||
self.c.LogAction(self.c.Tr.Actions.FixupCommitKeepMessage)
|
||||
return self.interactiveRebaseWithFlag(todo.Fixup, startIdx, endIdx, "-C")
|
||||
return self.interactiveRebaseWithFlag(todo.Fixup, startIdx, endIdx, parentIdx, "-C")
|
||||
})
|
||||
},
|
||||
Tooltip: self.c.Tr.FixupKeepMessageTooltip,
|
||||
|
|
@ -428,7 +431,10 @@ func (self *LocalCommitsController) switchFromCommitMessagePanelToEditor(filepat
|
|||
self.c.Git().Commit.RewordLastCommitInEditorWithMessageFileCmdObj(filepath))
|
||||
}
|
||||
|
||||
err := self.c.Git().Rebase.BeginInteractiveRebaseForCommit(self.c.Model().Commits, self.context().GetSelectedLineIdx(), false)
|
||||
selectedCommits, _, endIdx := self.c.Contexts().LocalCommits.GetSelectedItems()
|
||||
_, parentIdx := self.c.Helpers().Commits.GetParentCommit(selectedCommits, endIdx, 1)
|
||||
|
||||
err := self.c.Git().Rebase.BeginInteractiveRebaseForCommit(self.c.Model().Commits, self.context().GetSelectedLineIdx(), parentIdx, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -457,8 +463,11 @@ func (self *LocalCommitsController) handleReword(summary string, description str
|
|||
self.c.Tr.RewordingStatus, nil, nil)
|
||||
}
|
||||
|
||||
selectedCommits, _, endIdx := self.c.Contexts().LocalCommits.GetSelectedItems()
|
||||
_, parentIdx := self.c.Helpers().Commits.GetParentCommit(selectedCommits, endIdx, 1)
|
||||
|
||||
return self.c.WithWaitingStatus(self.c.Tr.RewordingStatus, func(gocui.Task) error {
|
||||
err := self.c.Git().Rebase.RewordCommit(self.c.Model().Commits, self.c.Contexts().LocalCommits.GetSelectedLineIdx(), summary, description)
|
||||
err := self.c.Git().Rebase.RewordCommit(self.c.Model().Commits, self.c.Contexts().LocalCommits.GetSelectedLineIdx(), parentIdx, summary, description)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -474,8 +483,11 @@ func (self *LocalCommitsController) doRewordEditor() error {
|
|||
return self.c.RunSubprocessAndRefresh(self.c.Git().Commit.RewordLastCommitInEditorCmdObj())
|
||||
}
|
||||
|
||||
selectedCommits, _, endIdx := self.c.Contexts().LocalCommits.GetSelectedItems()
|
||||
_, parentIdx := self.c.Helpers().Commits.GetParentCommit(selectedCommits, endIdx, 1)
|
||||
|
||||
subProcess, err := self.c.Git().Rebase.RewordCommitInEditor(
|
||||
self.c.Model().Commits, self.context().GetSelectedLineIdx(),
|
||||
self.c.Model().Commits, self.context().GetSelectedLineIdx(), parentIdx,
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -535,6 +547,8 @@ func (self *LocalCommitsController) drop(selectedCommits []*models.Commit, start
|
|||
|
||||
isMerge := selectedCommits[0].IsMerge()
|
||||
|
||||
_, parentIdx := self.c.Helpers().Commits.GetParentCommit(selectedCommits, endIdx, 1)
|
||||
|
||||
self.c.Confirm(types.ConfirmOpts{
|
||||
Title: self.c.Tr.DropCommitTitle,
|
||||
Prompt: lo.Ternary(isMerge, self.c.Tr.DropMergeCommitPrompt, self.c.Tr.DropCommitPrompt),
|
||||
|
|
@ -544,7 +558,7 @@ func (self *LocalCommitsController) drop(selectedCommits []*models.Commit, start
|
|||
if isMerge {
|
||||
return self.dropMergeCommit(startIdx)
|
||||
}
|
||||
return self.interactiveRebase(todo.Drop, startIdx, endIdx)
|
||||
return self.interactiveRebase(todo.Drop, startIdx, endIdx, parentIdx)
|
||||
})
|
||||
},
|
||||
})
|
||||
|
|
@ -562,10 +576,12 @@ func (self *LocalCommitsController) edit(selectedCommits []*models.Commit, start
|
|||
return self.updateTodos(todo.Edit, selectedCommits)
|
||||
}
|
||||
|
||||
_, parentIdx := self.c.Helpers().Commits.GetParentCommit(selectedCommits, endIdx, 1)
|
||||
|
||||
commits := self.c.Model().Commits
|
||||
if !commits[endIdx].IsMerge() {
|
||||
selectionRangeAndMode := self.getSelectionRangeAndMode()
|
||||
err := self.c.Git().Rebase.InteractiveRebase(commits, startIdx, endIdx, todo.Edit, "")
|
||||
err := self.c.Git().Rebase.InteractiveRebase(commits, startIdx, endIdx, parentIdx, todo.Edit, "")
|
||||
return self.c.Helpers().MergeAndRebase.CheckMergeOrRebaseWithRefreshOptions(
|
||||
err,
|
||||
types.RefreshOptions{
|
||||
|
|
@ -670,18 +686,18 @@ func (self *LocalCommitsController) pick(selectedCommits []*models.Commit) error
|
|||
panic("should be disabled when not rebasing")
|
||||
}
|
||||
|
||||
func (self *LocalCommitsController) interactiveRebase(action todo.TodoCommand, startIdx int, endIdx int) error {
|
||||
return self.interactiveRebaseWithFlag(action, startIdx, endIdx, "")
|
||||
func (self *LocalCommitsController) interactiveRebase(action todo.TodoCommand, startIdx int, endIdx int, parentIdx int) error {
|
||||
return self.interactiveRebaseWithFlag(action, startIdx, endIdx, parentIdx, "")
|
||||
}
|
||||
|
||||
func (self *LocalCommitsController) interactiveRebaseWithFlag(action todo.TodoCommand, startIdx int, endIdx int, flag string) error {
|
||||
func (self *LocalCommitsController) interactiveRebaseWithFlag(action todo.TodoCommand, startIdx int, endIdx int, parentIdx int, flag string) error {
|
||||
// When performing an action that will remove the selected commits, we need to select the
|
||||
// next commit down (which will end up at the start index after the action is performed)
|
||||
if action == todo.Drop || action == todo.Fixup || action == todo.Squash {
|
||||
self.context().SetSelection(startIdx)
|
||||
}
|
||||
|
||||
err := self.c.Git().Rebase.InteractiveRebase(self.c.Model().Commits, startIdx, endIdx, action, flag)
|
||||
err := self.c.Git().Rebase.InteractiveRebase(self.c.Model().Commits, startIdx, endIdx, parentIdx, action, flag)
|
||||
|
||||
return self.c.Helpers().MergeAndRebase.CheckMergeOrRebase(err)
|
||||
}
|
||||
|
|
@ -787,6 +803,9 @@ func (self *LocalCommitsController) moveUp(selectedCommits []*models.Commit, sta
|
|||
func (self *LocalCommitsController) amendTo(commit *models.Commit) error {
|
||||
var handleCommit func() error
|
||||
|
||||
selectedCommits, _, endIdx := self.c.Contexts().LocalCommits.GetSelectedItems()
|
||||
_, parentIdx := self.c.Helpers().Commits.GetParentCommit(selectedCommits, endIdx, 1)
|
||||
|
||||
if self.isSelectedHeadCommit() {
|
||||
handleCommit = func() error {
|
||||
return self.c.Helpers().WorkingTree.WithEnsureCommittableFiles(func() error {
|
||||
|
|
@ -802,7 +821,7 @@ func (self *LocalCommitsController) amendTo(commit *models.Commit) error {
|
|||
return self.c.Helpers().WorkingTree.WithEnsureCommittableFiles(func() error {
|
||||
return self.c.WithWaitingStatus(self.c.Tr.AmendingStatus, func(gocui.Task) error {
|
||||
self.c.LogAction(self.c.Tr.Actions.AmendCommit)
|
||||
err := self.c.Git().Rebase.AmendTo(self.c.Model().Commits, self.context().GetView().SelectedLineIdx())
|
||||
err := self.c.Git().Rebase.AmendTo(self.c.Model().Commits, self.context().GetView().SelectedLineIdx(), parentIdx)
|
||||
return self.c.Helpers().MergeAndRebase.CheckMergeOrRebase(err)
|
||||
})
|
||||
})
|
||||
|
|
@ -831,25 +850,27 @@ func (self *LocalCommitsController) canAmend(_ *models.Commit) *types.DisabledRe
|
|||
}
|
||||
|
||||
func (self *LocalCommitsController) amendAttribute(commits []*models.Commit, start, end int) error {
|
||||
selectedCommits, _, endIdx := self.c.Contexts().LocalCommits.GetSelectedItems()
|
||||
_, parentIdx := self.c.Helpers().Commits.GetParentCommit(selectedCommits, endIdx, 1)
|
||||
opts := self.c.KeybindingsOpts()
|
||||
return self.c.Menu(types.CreateMenuOptions{
|
||||
Title: "Amend commit attribute",
|
||||
Items: []*types.MenuItem{
|
||||
{
|
||||
Label: self.c.Tr.ResetAuthor,
|
||||
OnPress: func() error { return self.resetAuthor(start, end) },
|
||||
OnPress: func() error { return self.resetAuthor(start, end, parentIdx) },
|
||||
Key: opts.GetKey(opts.Config.AmendAttribute.ResetAuthor),
|
||||
Tooltip: self.c.Tr.ResetAuthorTooltip,
|
||||
},
|
||||
{
|
||||
Label: self.c.Tr.SetAuthor,
|
||||
OnPress: func() error { return self.setAuthor(start, end) },
|
||||
OnPress: func() error { return self.setAuthor(start, end, parentIdx) },
|
||||
Key: opts.GetKey(opts.Config.AmendAttribute.SetAuthor),
|
||||
Tooltip: self.c.Tr.SetAuthorTooltip,
|
||||
},
|
||||
{
|
||||
Label: self.c.Tr.AddCoAuthor,
|
||||
OnPress: func() error { return self.addCoAuthor(start, end) },
|
||||
OnPress: func() error { return self.addCoAuthor(start, end, parentIdx) },
|
||||
Key: opts.GetKey(opts.Config.AmendAttribute.AddCoAuthor),
|
||||
Tooltip: self.c.Tr.AddCoAuthorTooltip,
|
||||
},
|
||||
|
|
@ -857,10 +878,10 @@ func (self *LocalCommitsController) amendAttribute(commits []*models.Commit, sta
|
|||
})
|
||||
}
|
||||
|
||||
func (self *LocalCommitsController) resetAuthor(start, end int) error {
|
||||
func (self *LocalCommitsController) resetAuthor(start, end int, parentIdx int) error {
|
||||
return self.c.WithWaitingStatus(self.c.Tr.AmendingStatus, func(gocui.Task) error {
|
||||
self.c.LogAction(self.c.Tr.Actions.ResetCommitAuthor)
|
||||
if err := self.c.Git().Rebase.ResetCommitAuthor(self.c.Model().Commits, start, end); err != nil {
|
||||
if err := self.c.Git().Rebase.ResetCommitAuthor(self.c.Model().Commits, start, end, parentIdx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
@ -869,14 +890,14 @@ func (self *LocalCommitsController) resetAuthor(start, end int) error {
|
|||
})
|
||||
}
|
||||
|
||||
func (self *LocalCommitsController) setAuthor(start, end int) error {
|
||||
func (self *LocalCommitsController) setAuthor(start, end int, parentIdx int) error {
|
||||
self.c.Prompt(types.PromptOpts{
|
||||
Title: self.c.Tr.SetAuthorPromptTitle,
|
||||
FindSuggestionsFunc: self.c.Helpers().Suggestions.GetAuthorsSuggestionsFunc(),
|
||||
HandleConfirm: func(value string) error {
|
||||
return self.c.WithWaitingStatus(self.c.Tr.AmendingStatus, func(gocui.Task) error {
|
||||
self.c.LogAction(self.c.Tr.Actions.SetCommitAuthor)
|
||||
if err := self.c.Git().Rebase.SetCommitAuthor(self.c.Model().Commits, start, end, value); err != nil {
|
||||
if err := self.c.Git().Rebase.SetCommitAuthor(self.c.Model().Commits, start, end, parentIdx, value); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
@ -889,14 +910,14 @@ func (self *LocalCommitsController) setAuthor(start, end int) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (self *LocalCommitsController) addCoAuthor(start, end int) error {
|
||||
func (self *LocalCommitsController) addCoAuthor(start, end int, parentIdx int) error {
|
||||
self.c.Prompt(types.PromptOpts{
|
||||
Title: self.c.Tr.AddCoAuthorPromptTitle,
|
||||
FindSuggestionsFunc: self.c.Helpers().Suggestions.GetAuthorsSuggestionsFunc(),
|
||||
HandleConfirm: func(value string) error {
|
||||
return self.c.WithWaitingStatus(self.c.Tr.AmendingStatus, func(gocui.Task) error {
|
||||
self.c.LogAction(self.c.Tr.Actions.AddCommitCoAuthor)
|
||||
if err := self.c.Git().Rebase.AddCommitCoAuthor(self.c.Model().Commits, start, end, value); err != nil {
|
||||
if err := self.c.Git().Rebase.AddCommitCoAuthor(self.c.Model().Commits, start, end, parentIdx, value); err != nil {
|
||||
return err
|
||||
}
|
||||
self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC})
|
||||
|
|
|
|||
|
|
@ -226,8 +226,10 @@ func (self *PatchBuildingController) discardSelectionFromCommit() error {
|
|||
|
||||
return self.c.WithWaitingStatusSync(self.c.Tr.RebasingStatus, func() error {
|
||||
commitIndex := self.getPatchCommitIndex()
|
||||
selectedCommits, _, endIdx := self.c.Contexts().LocalCommits.GetSelectedItems()
|
||||
_, parentIdx := self.c.Helpers().Commits.GetParentCommit(selectedCommits, endIdx, 1)
|
||||
self.c.LogAction(self.c.Tr.Actions.RemovePatchFromCommit)
|
||||
err := self.c.Git().Patch.DeletePatchesFromCommit(self.c.Model().Commits, commitIndex)
|
||||
err := self.c.Git().Patch.DeletePatchesFromCommit(self.c.Model().Commits, commitIndex, parentIdx)
|
||||
self.c.Helpers().PatchBuilding.Escape()
|
||||
return self.c.Helpers().MergeAndRebase.CheckMergeOrRebaseWithRefreshOptions(
|
||||
err, types.RefreshOptions{Mode: types.SYNC})
|
||||
|
|
|
|||
|
|
@ -1282,7 +1282,7 @@ func EnglishTranslationSet() *TranslationSet {
|
|||
SetFixupMessageTooltip: "Set the message option for the fixup commit. The -C option means to use this commit's message instead of the target commit's message.",
|
||||
FixupDiscardMessage: "Fixup and discard this commit's message",
|
||||
FixupDiscardMessageTooltip: "Squash the selected commit into the commit below, discarding this commit's message.",
|
||||
SureSquashThisCommit: "Are you sure you want to squash the selected commit(s) into the commit below?",
|
||||
SureSquashThisCommit: "Are you sure you want to squash the selected commit(s) into the parent commit below?",
|
||||
Squash: "Squash",
|
||||
PickCommitTooltip: "Mark the selected commit to be picked (when mid-rebase). This means that the commit will be retained upon continuing the rebase.",
|
||||
Pick: "Pick",
|
||||
|
|
|
|||
|
|
@ -1,381 +1,381 @@
|
|||
{
|
||||
"NotEnoughSpace": "패널을 렌더링 할 공간이 부족합니다.",
|
||||
"DiffTitle": "변경점",
|
||||
"FilesTitle": "파일",
|
||||
"BranchesTitle": "브랜치",
|
||||
"CommitsTitle": "커밋",
|
||||
"EasterEgg": "이스터 에그",
|
||||
"UnstagedChanges": "Staged되지 않은 변경 내용",
|
||||
"StagedChanges": "Staged된 변경 내용",
|
||||
"StagingTitle": "메인 패널 (Staging)",
|
||||
"MergingTitle": "메인 패널 (Merging)",
|
||||
"NormalTitle": "메인 패널 (Normal)",
|
||||
"LogTitle": "로그",
|
||||
"CommitSummary": "커밋 메시지",
|
||||
"CredentialsUsername": "사용자 이름",
|
||||
"CredentialsPassword": "패스워드",
|
||||
"CredentialsPassphrase": "SSH키의 passphrase 입력",
|
||||
"CredentialsPIN": "SSH키\u001d의 PIN\u001d을 입력",
|
||||
"CredentialsToken": "SSH 키를 위한 토큰 입력",
|
||||
"PassUnameWrong": "패스워드, passphrase 또는 사용자 이름이 잘못되었습니다.",
|
||||
"Commit": "커밋 변경내용",
|
||||
"CommitTooltip": "스테이징된 변경 사항 커밋.",
|
||||
"AmendLastCommit": "마지맛 커밋 수정",
|
||||
"AmendLastCommitTitle": "마지막 커밋 수정",
|
||||
"SureToAmend": "마지막 커밋을 수정하시겠습니까? 그런 다음 커밋 패널에서 커밋 메시지를 변경할 수 있습니다.",
|
||||
"NoCommitToAmend": "Amend 가능한 커밋이 없습니다.",
|
||||
"CommitChangesWithEditor": "Git 편집기를 사용하여 변경 내용을 커밋합니다.",
|
||||
"NoBaseCommitsFound": "기본 커밋을 찾을 수 없습니다",
|
||||
"MultipleBaseCommitsFoundStaged": "여러 개의 기본 커밋을 찾았습니다. (한 번에 더 적은 변경 사항을 스테이징해보세요)",
|
||||
"MultipleBaseCommitsFoundUnstaged": "여러 개의 기본 커밋을 찾았습니다. (변경 사항 중 일부를 스테이징해보세요)",
|
||||
"BaseCommitIsAlreadyOnMainBranch": "이 변경 사항의 기본 커밋은 이미 메인 브랜치에 있습니다",
|
||||
"StatusTitle": "상태",
|
||||
"GlobalTitle": "글로벌 키 바인딩",
|
||||
"Execute": "실행",
|
||||
"Stage": "Staged 전환",
|
||||
"ToggleStagedAll": "모든 변경을 Staged/unstaged으로 전환",
|
||||
"ToggleTreeView": "파일 트리뷰로 전환",
|
||||
"OpenMergeTool": "Git mergetool를 열기",
|
||||
"Refresh": "새로고침",
|
||||
"Push": "푸시",
|
||||
"Pull": "업데이트",
|
||||
"FileFilter": "파일을 필터하기 (Staged/unstaged)",
|
||||
"CopyToClipboardMenu": "클립보드에 복사",
|
||||
"CopyFileName": "파일명",
|
||||
"CopySelectedDiff": "선택한 파일의 변경점",
|
||||
"CopyAllFilesDiff": "모든 파일의 변경점",
|
||||
"NoContentToCopyError": "복사 대상이 없습니다",
|
||||
"FileNameCopiedToast": "파일명을 클립보드에 복사했습니다.",
|
||||
"FilePathCopiedToast": "파일경로를 클립보드에 복사했습니다.",
|
||||
"FileDiffCopiedToast": "파일의 변경점을 클립보드에 복사했습니다.",
|
||||
"AllFilesDiffCopiedToast": "모든 파일의 변경점을 클립보드에 복사했습니다.",
|
||||
"FilterStagedFiles": "Staged된 파일만 표시",
|
||||
"FilterUnstagedFiles": "Stage되지 않은 파일만 표시",
|
||||
"MergeConflictsTitle": "병합 충돌",
|
||||
"Checkout": "체크아웃",
|
||||
"NoChangedFiles": "변경된 파일이 없습니다.",
|
||||
"SoftReset": "소프트 리셋",
|
||||
"AlreadyCheckedOutBranch": "브랜치가 이미 체크아웃 되었습니다",
|
||||
"SureForceCheckout": "강제로 체크아웃하시겠습니까? 모든 로컬 변경 사항을 잃게 됩니다.",
|
||||
"ForceCheckoutBranch": "브랜치 강제 체크아웃",
|
||||
"BranchName": "브랜치 이름",
|
||||
"NewBranchNameBranchOff": "새 브랜치 이름 (branch is off of '{{.branchName}}')",
|
||||
"CantDeleteCheckOutBranch": "체크아웃하는 브랜치는 삭제할 수 없습니다!",
|
||||
"DeleteBranchTitle": "'{{.selectedBranchName}}' 브랜치를 삭제하시겠습니까?",
|
||||
"DeleteLocalBranch": "로컬 브랜치를 삭제",
|
||||
"ForceDeleteBranchTitle": "브랜치를 강제 삭제",
|
||||
"ForceDeleteBranchMessage": "'{{.selectedBranchName}}'는 완전히 병합되지 않았습니다. 정말 삭제하시겠습니까?",
|
||||
"RebaseBranch": "체크아웃된 브랜치를 이 브랜치에 리베이스",
|
||||
"CantRebaseOntoSelf": "브랜치를 자기 자신에게 리베이스할 수는 없습니다.",
|
||||
"CantMergeBranchIntoItself": "브랜치를 자기 자신에게 병합할 수는 없습니다.",
|
||||
"ForceCheckout": "강제 체크아웃",
|
||||
"CheckoutByName": "이름으로 체크아웃",
|
||||
"NewBranch": "새 브랜치 생성",
|
||||
"NoBranchesThisRepo": "저장소에 브랜치가 존재하지 않습니다.",
|
||||
"CommitWithoutMessageErr": "커밋 메시지를 입력하세요.",
|
||||
"Close": "닫기",
|
||||
"CloseCancel": "닫기/취소",
|
||||
"Confirm": "확인",
|
||||
"Quit": "종료",
|
||||
"SureSquashThisCommit": "Are you sure you want to squash this commit into the commit below?",
|
||||
"Squash": "스쿼시",
|
||||
"PickCommitTooltip": "Pick commit (when mid-rebase)",
|
||||
"Reword": "커밋메시지 변경",
|
||||
"DropCommit": "커밋 삭제",
|
||||
"MoveDownCommit": "커밋을 1개 아래로 이동",
|
||||
"MoveUpCommit": "커밋을 1개 위로 이동",
|
||||
"EditCommitTooltip": "커밋을 편집",
|
||||
"AmendCommitTooltip": "Amend commit with staged changes",
|
||||
"ResetAuthor": "Reset commit author",
|
||||
"RewordCommitEditor": "에디터에서 커밋메시지 수정",
|
||||
"NoCommitsThisBranch": "이 브랜치에 커밋이 없습니다.",
|
||||
"Error": "오류",
|
||||
"Undo": "되돌리기",
|
||||
"UndoReflog": "되돌리기 (reflog) (실험적)",
|
||||
"RedoReflog": "다시 실행 (reflog) (실험적)",
|
||||
"Apply": "적용",
|
||||
"NoStashEntries": "Stash가 존재하지 않습니다.",
|
||||
"StashDrop": "Stash를 삭제",
|
||||
"StashPop": "Stash를 pop",
|
||||
"SurePopStashEntry": "정말로 Stash를 pop하시겠습니까?",
|
||||
"StashApply": "Stash 적용",
|
||||
"SureApplyStashEntry": "정말로 Stash를 적용하시겠습니까?",
|
||||
"StashChanges": "변경을 Stash",
|
||||
"OpenConfig": "설정 파일 열기",
|
||||
"EditConfig": "설정 파일 수정",
|
||||
"ForcePush": "강제 푸시",
|
||||
"ForcePushPrompt": "브랜치가 원격 브랜치에서 분기하고 있습니다. 'esc'를 눌러 취소하거나, 'enter'를 눌러 강제로 푸시하세요.",
|
||||
"ForcePushDisabled": "브랜치가 원격 브랜치에서 분기하고 있습니다. force push가 비활성화 되었습니다.",
|
||||
"UpdatesRejectedAndForcePushDisabled": "업데이트가 거부되었으며 강제 푸시를 비활성화했습니다.",
|
||||
"CheckForUpdate": "업데이트 확인",
|
||||
"CheckingForUpdates": "업데이트 확인 중...",
|
||||
"UpdateAvailableTitle": "새로운 업데이트 사용가능!",
|
||||
"UpdateAvailable": "버전 {{.newVersion}} 을(를) 설치하시겠습니까?",
|
||||
"UpdateInProgressWaitingStatus": "업데이트 중",
|
||||
"UpdateCompletedTitle": "업데이트 완료!",
|
||||
"UpdateCompleted": "업데이트 설치에 성공했습니다. lazygit를 재시작해주세요.",
|
||||
"FailedToRetrieveLatestVersionErr": "버전 정보를 받아오는데 실패했습니다.",
|
||||
"OnLatestVersionErr": "이미 최신 버전을 사용하고 있습니다.",
|
||||
"MajorVersionErr": "새 버전 ({{.newVersion}}) 에 현재 버전({{.currentVersion}}) 과 비교할 때 호환되지 않는 변경 사항이 있습니다.",
|
||||
"CouldNotFindBinaryErr": "{{.url}} 에서 바이너리를 찾을 수 없습니다.",
|
||||
"UpdateFailedErr": "업데이트 실패: {{.errMessage}}",
|
||||
"ConfirmQuitDuringUpdateTitle": "현재 업데이트 중입니다.",
|
||||
"ConfirmQuitDuringUpdate": "현재 업데이트를 진행 중입니다.종료하시겠습니까?",
|
||||
"GitconfigParseErr": "따옴표로 묶이지 않은 '\\' 문자가 있어서 Gogit이 gitconfig 파일을 분석하지 못했습니다. 이를 제거하면 문제가 해결됩니다.",
|
||||
"EditFile": "파일 편집",
|
||||
"OpenFile": "파일 닫기",
|
||||
"IgnoreFile": ".gitignore에 추가",
|
||||
"RefreshFiles": "파일 새로고침",
|
||||
"Merge": "현재 브랜치에 병합",
|
||||
"ConfirmQuit": "정말로 종료하시겠습니까?",
|
||||
"SwitchRepo": "최근에 사용한 저장소로 전환",
|
||||
"UnsupportedGitService": "지원되지 않는 Git 서비스입니다.",
|
||||
"CopyPullRequestURL": "풀 리퀘스트 URL을 클립보드에 복사",
|
||||
"NoBranchOnRemote": "브랜치가 원격에 없습니다. 원격에 먼저 푸시해야합니다.",
|
||||
"FileEnter": "Stage individual hunks/lines for file, or collapse/expand for directory",
|
||||
"StageSelectionTooltip": "선택한 행을 staged / unstaged",
|
||||
"DiscardSelection": "변경을 삭제 (git reset)",
|
||||
"ToggleSelectionForPatch": "Line(s)을 패치에 추가/삭제",
|
||||
"ToggleStagingView": "패널 전환",
|
||||
"ReturnToFilesPanel": "파일 목록으로 돌아가기",
|
||||
"FastForward": "Fast-forward this branch from its upstream",
|
||||
"FoundConflictsTitle": "Auto-merge failed",
|
||||
"RecentRepos": "최근에 사용한 저장소",
|
||||
"CommitSummaryTitle": "커밋메시지",
|
||||
"LocalBranchesTitle": "브랜치",
|
||||
"SearchTitle": "검색",
|
||||
"TagsTitle": "태그",
|
||||
"MenuTitle": "메뉴",
|
||||
"RemotesTitle": "원격",
|
||||
"RemoteBranchesTitle": "원격 브랜치",
|
||||
"PatchBuildingTitle": "메인 패널 (Patch Building)",
|
||||
"InformationTitle": "정보",
|
||||
"ErrorOccurred": "오류가 발생했습니다! issue를 작성해 주세요: ",
|
||||
"CherryPickCopy": "커밋을 복사 (cherry-pick)",
|
||||
"PasteCommits": "커밋을 붙여넣기 (cherry-pick)",
|
||||
"CherryPick": "체리픽",
|
||||
"Donate": "후원",
|
||||
"AskQuestion": "질문하기",
|
||||
"PrevHunk": "이전 hunk를 선택",
|
||||
"NextHunk": "다음 hunk를 선택",
|
||||
"PrevConflict": "이전 충돌을 선택",
|
||||
"NextConflict": "다음 충돌을 선택",
|
||||
"SelectPrevHunk": "이전 hunk를 선택",
|
||||
"SelectNextHunk": "다음 hunk를 선택",
|
||||
"ScrollDown": "아래로 스크롤",
|
||||
"ScrollUp": "위로 스크롤",
|
||||
"ScrollUpMainWindow": "메인 패널을 위로 스크롤",
|
||||
"ScrollDownMainWindow": "메인 패널을 아래로로 스크롤",
|
||||
"DropCommitTitle": "커밋 삭제",
|
||||
"DropCommitPrompt": "정말로 선택한 커밋을 삭제하시겠습니까?",
|
||||
"PullingStatus": "업데이트 중",
|
||||
"PushingStatus": "푸시 중",
|
||||
"FetchingStatus": "패치 중",
|
||||
"SubCommitsDynamicTitle": "커밋 (%s)",
|
||||
"RemoteBranchesDynamicTitle": "원격브랜치 (%s)",
|
||||
"ViewItemFiles": "View selected item's files",
|
||||
"CommitFilesTitle": "커밋 파일",
|
||||
"CheckoutCommitFileTooltip": "Checkout file",
|
||||
"DiscardOldFileChangeTooltip": "Discard this commit's changes to this file",
|
||||
"DiscardFileChangesTitle": "파일 변경 사항 버리기",
|
||||
"Discard": "View 'discard changes' options",
|
||||
"Cancel": "취소",
|
||||
"DiscardAllChanges": "모든 변경사항 버리기",
|
||||
"Delete": "삭제",
|
||||
"Reset": "초기화",
|
||||
"ViewResetOptions": "View reset options",
|
||||
"CreateFixupCommitTooltip": "Create fixup commit for this commit",
|
||||
"SquashAboveCommitsTooltip": "Squash all 'fixup!' commits above selected commit (autosquash)",
|
||||
"PressEnterToReturn": "엔터를 눌러 lazygit으로 돌아갑니다.",
|
||||
"ViewStashOptions": "Stash 옵션 보기",
|
||||
"StashAllChanges": "변경사항을 Stash",
|
||||
"StashOptions": "Stash 옵션",
|
||||
"ScrollLeft": "우 스크롤",
|
||||
"ScrollRight": "좌 스크롤",
|
||||
"DiscardPatch": "Patch 버리기",
|
||||
"ToggleAllInPatch": "Toggle all files included in patch",
|
||||
"ViewPatchOptions": "커스텀 Patch 옵션 보기",
|
||||
"PatchOptionsTitle": "Patch 옵션",
|
||||
"EnterCommitFile": "Enter file to add selected lines to the patch (or toggle directory collapsed)",
|
||||
"EnterUpstream": "'<remote> <branchname>'와 같은 형식으로 입력하세요.",
|
||||
"InvalidUpstream": "Upstream의 형식이 잘못되었습니다.'<remote> <branchname>' 와 같은 형식으로 입력하세요.",
|
||||
"NewRemote": "새로운 Remote 추가",
|
||||
"NewRemoteName": "새로운 Remote 이름:",
|
||||
"NewRemoteUrl": "새로운 Remote URL:",
|
||||
"EditRemoteName": "{{.remoteName}} 의 새로운 Remote 이름 입력:",
|
||||
"EditRemoteUrl": "{{.remoteName}} 의 새로운 Remote URL 입력:",
|
||||
"RemoveRemote": "Remote를 삭제",
|
||||
"DeleteRemoteBranch": "원격 브랜치를 삭제",
|
||||
"SetUpstream": "Set as upstream of checked-out branch",
|
||||
"EditRemoteTooltip": "Remote를 수정",
|
||||
"TagNameTitle": "태그 이름",
|
||||
"TagMessageTitle": "태그 메시지",
|
||||
"PushTagTitle": "원격에 태그 '{{.tagName}}' 를 푸시",
|
||||
"PushTag": "태그를 push",
|
||||
"NewTag": "태그를 생성",
|
||||
"FetchRemoteTooltip": "원격을 업데이트",
|
||||
"GitFlowOptions": "Git-flow 옵션 보기",
|
||||
"NewBranchNamePrompt": "새로운 브랜치 이름 입력",
|
||||
"NextScreenMode": "다음 스크린 모드 (normal/half/fullscreen)",
|
||||
"PrevScreenMode": "이전 스크린 모드",
|
||||
"StartSearch": "검색 시작",
|
||||
"Keybindings": "키 바인딩",
|
||||
"RenameBranch": "브랜치 이름 변경",
|
||||
"OpenKeybindingsMenu": "매뉴 열기",
|
||||
"ResetCherryPick": "Reset cherry-picked (copied) commits selection",
|
||||
"NextTab": "이전 탭",
|
||||
"PrevTab": "다음 탭",
|
||||
"CantUndoWhileRebasing": "리베이스중에는 되돌릴 수 없습니다.",
|
||||
"CantRedoWhileRebasing": "리베이스중에는 다시 실행할 수 없습니다.",
|
||||
"ConfirmationTitle": "확인 패널",
|
||||
"PrevPage": "이전 페이지",
|
||||
"NextPage": "다음 페이지",
|
||||
"GotoTop": "맨 위로 스크롤 ",
|
||||
"GotoBottom": "맨 아래로 스크롤 ",
|
||||
"ResetInParentheses": "(reset)",
|
||||
"OpenFilteringMenu": "View filter-by-path options",
|
||||
"ExitFilterMode": "Stop filtering by path",
|
||||
"MustExitFilterModePrompt": "Command not available in filtered mode. Exit filtered mode?",
|
||||
"EnterRefName": "Ref 입력:",
|
||||
"ExitDiffMode": "Diff 모드 종료",
|
||||
"DiffingMenuTitle": "Diff",
|
||||
"ViewDiffingOptions": "Diff 메뉴 열기",
|
||||
"OpenCommandLogMenu": "명령어 로그 메뉴 열기",
|
||||
"CommitDiff": "커밋의 iff",
|
||||
"CommitHash": "커밋 해시",
|
||||
"CommitURL": "커밋 URL",
|
||||
"CommitMessage": "커밋 메시지",
|
||||
"CommitAuthor": "커밋 작성자",
|
||||
"CopyCommitAttributeToClipboard": "커밋 attribute 복사",
|
||||
"CopyBranchNameToClipboard": "브랜치명을 클립보드에 복사",
|
||||
"CopyPathToClipboard": "파일명을 클립보드에 복사",
|
||||
"CopySelectedTextToClipboard": "선택한 텍스트를 클립보드에 복사",
|
||||
"NoFilesStagedTitle": "파일이 Staged 되지 않았습니다.",
|
||||
"NoFilesStagedPrompt": "파일이 Staged 되지 않았습니다. 모든 파일을 커밋하시겠습니까?",
|
||||
"BranchNotFoundTitle": "브랜치를 찾을 수 없습니다.",
|
||||
"BranchNotFoundPrompt": "브랜치를 찾을 수 없습니다. 새로운 브랜치를 생성합니다.",
|
||||
"DiscardChangeTitle": "선택한 라인을 unstaged",
|
||||
"DiscardChangePrompt": "정말로 선택한 라인을 삭제 (git reset) 하시겠습니까? 이 조작은 취소할 수 없습니다.\n이 경고를 비활성화 하려면 설정 파일의 'gui.skipDiscardChangeWarning' 를 true로 설정하세요.",
|
||||
"CreateNewBranchFromCommit": "커밋에서 새 브랜치를 만듭니다.",
|
||||
"ViewCommits": "커밋 보기",
|
||||
"RunningCustomCommandStatus": "커스텀 명령어 실행",
|
||||
"EnterSubmoduleTooltip": "서브모듈 열기",
|
||||
"CopySubmoduleNameToClipboard": "서브모듈 이름을 클립보드에 복사",
|
||||
"RemoveSubmodule": "서브모듈 삭제",
|
||||
"RemoveSubmodulePrompt": "정말로 서브모듈 '%s'및 해당 디렉토리를 제거하시겠습니까? 이것은 되돌릴 수 없습니다.",
|
||||
"ResettingSubmoduleStatus": "서브모듈를 리셋",
|
||||
"NewSubmoduleName": "새로운 서브모듈이름 :",
|
||||
"NewSubmoduleUrl": "새로운 서브모듈의 URL:",
|
||||
"NewSubmodulePath": "새로운 서브모듈의 경로",
|
||||
"NewSubmodule": "새로운 서브모듈 추가",
|
||||
"AddingSubmoduleStatus": "새로운 서브모듈 추가",
|
||||
"UpdateSubmoduleUrl": "서브모듈 '%s' 의 URL을 업데이트",
|
||||
"EditSubmoduleUrl": "서브모듈의 URL을 수정",
|
||||
"InitializingSubmoduleStatus": "서브모듈 초기화",
|
||||
"InitSubmoduleTooltip": "서브모듈 초기화",
|
||||
"SubmoduleUpdateTooltip": "서브모듈 업데이트",
|
||||
"UpdatingSubmoduleStatus": "서브모듈 업데이트",
|
||||
"BulkInitSubmodules": "서브모듈 일괄 초기화",
|
||||
"BulkUpdateSubmodules": "서브모듈 일괄 업데이트",
|
||||
"SubmodulesTitle": "서브모듈",
|
||||
"SuggestionsCheatsheetTitle": "추천",
|
||||
"SuggestionsTitle": "추천 (press %s to focus)",
|
||||
"ExtrasTitle": "명령어 로그",
|
||||
"PullRequestURLCopiedToClipboard": "풀 리퀘스트의 URL을 클립보드에 복사했습니다.",
|
||||
"CommitDiffCopiedToClipboard": "커밋의 Diff를 클립보드에 복사했습니다.",
|
||||
"CommitURLCopiedToClipboard": "커밋의 URL를 클립보드에 복사했습니다.",
|
||||
"CommitMessageCopiedToClipboard": "커밋 메시지를 클립보드에 복사했습니다.",
|
||||
"CommitAuthorCopiedToClipboard": "커밋 작성자를 클립보드에 복사했습니다.",
|
||||
"CopiedToClipboard": "클립보드에 복사했습니다.",
|
||||
"ErrCannotEditDirectory": "디렉토리는 편집할 수 없습니다.",
|
||||
"ErrStageDirWithInlineMergeConflicts": "병합 충돌이 발생한 파일을 포함하는 디렉토리는 Staged/untaged할 수 없습니다. 병합 충돌을 먼저 해결하세요.",
|
||||
"ErrRepositoryMovedOrDeleted": "저장소를 찾을 수 없습니다. 이미 삭제되었거나 이동되었을 가능성이 있습니다. ¯\\_(ツ)_/¯",
|
||||
"CommandLog": "명령어 로그",
|
||||
"ToggleShowCommandLog": "명령어 로그 표시 여부 전환",
|
||||
"FocusCommandLog": "명령어 로그에 포커스",
|
||||
"CommandLogHeader": "명령어 로그표시 여부는 '%s' 으로 전환할 수 있습니다.\n",
|
||||
"RandomTip": "랜덤 Tip",
|
||||
"ToggleWhitespaceInDiffView": "공백문자를 Diff 뷰에서 표시 여부 전환",
|
||||
"IncreaseContextInDiffView": "Diff 보기의 변경 사항 주위에 표시되는 컨텍스트의 크기를 늘리기",
|
||||
"DecreaseContextInDiffView": "Diff 보기의 변경 사항 주위에 표시되는 컨텍스트 크기 줄이기",
|
||||
"CreatePullRequestOptions": "풀 리퀘스트 생성 옵션",
|
||||
"DefaultBranch": "기본 브랜치",
|
||||
"SelectBranch": "브랜치를 선택",
|
||||
"CreatePullRequest": "풀 리퀘스트 생성",
|
||||
"SelectConfigFile": "설정파일 선택",
|
||||
"NoConfigFileFoundErr": "설정 파일을 찾지 못했습니다.",
|
||||
"LoadingFileSuggestions": "파일 제안 로딩 중",
|
||||
"LoadingCommits": "커밋 로딩",
|
||||
"AbortTitle": "%s 중지",
|
||||
"AbortPrompt": "정말로 실행중인 %s 를 중지할까요?",
|
||||
"OpenLogMenu": "로그 메뉴 열기",
|
||||
"LogMenuTitle": "커밋 로그 옵션",
|
||||
"ShowGitGraph": "커밋 그래프 표시",
|
||||
"SortCommits": "커밋 정렬",
|
||||
"OpenCommitInBrowser": "브라우저에서 커밋 열기",
|
||||
"ViewBisectOptions": "Bisect 옵션 보기",
|
||||
"RewordInEditorTitle": "커밋 메시지를 에디터에서 수정",
|
||||
"ToggleRangeSelect": "드래그 선택 전환",
|
||||
"Actions": {
|
||||
"CheckoutCommit": "커밋 체크아웃",
|
||||
"CheckoutTag": "태그 체크아웃",
|
||||
"CheckoutBranch": "브랜치 체크아웃",
|
||||
"ForceCheckoutBranch": "브랜치 Force 체크아웃",
|
||||
"Merge": "병합",
|
||||
"RebaseBranch": "브랜치 리베이스",
|
||||
"RenameBranch": "브랜치 이름 변경",
|
||||
"CreateBranch": "브랜치 생성",
|
||||
"CherryPick": "(Cherry-pick) 커밋 붙여넣기",
|
||||
"CheckoutFile": "체크아웃 파일",
|
||||
"FixupCommit": "커밋 Fixup",
|
||||
"RewordCommit": "커밋 Reword",
|
||||
"DropCommit": "커밋 Drop",
|
||||
"EditCommit": "커밋 수정",
|
||||
"AmendCommit": "커밋 Amend",
|
||||
"ResetCommitAuthor": "커밋 작성자 Reset",
|
||||
"RevertCommit": "커밋 Revert",
|
||||
"CreateFixupCommit": "Fixup 커밋 생성",
|
||||
"CopyCommitMessageToClipboard": "커밋 메시지를 클립보드에 복사",
|
||||
"CopyCommitDiffToClipboard": "커밋 diff를 클립보드에 복사",
|
||||
"CopyCommitHashToClipboard": "커밋 해시를 클립보드에 복사",
|
||||
"CopyCommitURLToClipboard": "커밋 URL를 클립보드에 복사",
|
||||
"CopyCommitAuthorToClipboard": "커밋 작성자를 클립보드에 복사",
|
||||
"CopyCommitAttributeToClipboard": "클립보드에 복사",
|
||||
"DiscardAllChangesInFile": "Discard all changes in file",
|
||||
"DiscardAllUnstagedChangesInFile": "Discard all unstaged changes in file",
|
||||
"IgnoreExcludeFile": "Ignore file",
|
||||
"Commit": "커밋",
|
||||
"Push": "푸시",
|
||||
"Pull": "업데이트(Pull)",
|
||||
"OpenFile": "파일 열기",
|
||||
"CopyToClipboard": "클립보드에 복사",
|
||||
"CopySelectedTextToClipboard": "선택한 텍스트를 클립보드에 복사",
|
||||
"DeleteRemoteBranch": "원격 브랜치 삭제",
|
||||
"RemoveSubmodule": "서브모듈 삭제",
|
||||
"ResetSubmodule": "서브모듈 Reset",
|
||||
"AddSubmodule": "서브모듈 추가",
|
||||
"UpdateSubmoduleUrl": "서브모듈 URL 업데이트",
|
||||
"InitialiseSubmodule": "서브모듈 초기화",
|
||||
"UpdateSubmodule": "서브모듈 업데이트",
|
||||
"PushTag": "태그 푸시g",
|
||||
"DiscardUnstagedFileChanges": "Unstaged 파일 변경사항 버리기",
|
||||
"RemoveUntrackedFiles": "Untracked 파일 삭제",
|
||||
"RemoveStagedFiles": "Staged 파일 삭제",
|
||||
"Undo": "되돌리기",
|
||||
"Redo": "다시 실행",
|
||||
"CopyPullRequestURL": "풀 리퀘스트 URL 복사",
|
||||
"OpenMergeTool": "병합 도구 열기",
|
||||
"OpenCommitInBrowser": "브라우저에서 커밋 열기",
|
||||
"OpenPullRequest": "브라우저에서 풀 리퀘스트 열기"
|
||||
},
|
||||
"Bisect": {
|
||||
"ResetTitle": "'git bisect' 를 리셋",
|
||||
"ResetPrompt": "정말로 'git bisect' 를 리셋하시겠습니까?",
|
||||
"ResetOption": "Bisect를 리셋",
|
||||
"Mark": "Mark %s as %s",
|
||||
"SkipCurrent": "%s 를 스킵",
|
||||
"CompleteTitle": "Bisect 완료"
|
||||
},
|
||||
"Log": {},
|
||||
"BreakingChangesByVersion": {}
|
||||
"NotEnoughSpace": "패널을 렌더링 할 공간이 부족합니다.",
|
||||
"DiffTitle": "변경점",
|
||||
"FilesTitle": "파일",
|
||||
"BranchesTitle": "브랜치",
|
||||
"CommitsTitle": "커밋",
|
||||
"EasterEgg": "이스터 에그",
|
||||
"UnstagedChanges": "Staged되지 않은 변경 내용",
|
||||
"StagedChanges": "Staged된 변경 내용",
|
||||
"StagingTitle": "메인 패널 (Staging)",
|
||||
"MergingTitle": "메인 패널 (Merging)",
|
||||
"NormalTitle": "메인 패널 (Normal)",
|
||||
"LogTitle": "로그",
|
||||
"CommitSummary": "커밋 메시지",
|
||||
"CredentialsUsername": "사용자 이름",
|
||||
"CredentialsPassword": "패스워드",
|
||||
"CredentialsPassphrase": "SSH키의 passphrase 입력",
|
||||
"CredentialsPIN": "SSH키\u001d의 PIN\u001d을 입력",
|
||||
"CredentialsToken": "SSH 키를 위한 토큰 입력",
|
||||
"PassUnameWrong": "패스워드, passphrase 또는 사용자 이름이 잘못되었습니다.",
|
||||
"Commit": "커밋 변경내용",
|
||||
"CommitTooltip": "스테이징된 변경 사항 커밋.",
|
||||
"AmendLastCommit": "마지맛 커밋 수정",
|
||||
"AmendLastCommitTitle": "마지막 커밋 수정",
|
||||
"SureToAmend": "마지막 커밋을 수정하시겠습니까? 그런 다음 커밋 패널에서 커밋 메시지를 변경할 수 있습니다.",
|
||||
"NoCommitToAmend": "Amend 가능한 커밋이 없습니다.",
|
||||
"CommitChangesWithEditor": "Git 편집기를 사용하여 변경 내용을 커밋합니다.",
|
||||
"NoBaseCommitsFound": "기본 커밋을 찾을 수 없습니다",
|
||||
"MultipleBaseCommitsFoundStaged": "여러 개의 기본 커밋을 찾았습니다. (한 번에 더 적은 변경 사항을 스테이징해보세요)",
|
||||
"MultipleBaseCommitsFoundUnstaged": "여러 개의 기본 커밋을 찾았습니다. (변경 사항 중 일부를 스테이징해보세요)",
|
||||
"BaseCommitIsAlreadyOnMainBranch": "이 변경 사항의 기본 커밋은 이미 메인 브랜치에 있습니다",
|
||||
"StatusTitle": "상태",
|
||||
"GlobalTitle": "글로벌 키 바인딩",
|
||||
"Execute": "실행",
|
||||
"Stage": "Staged 전환",
|
||||
"ToggleStagedAll": "모든 변경을 Staged/unstaged으로 전환",
|
||||
"ToggleTreeView": "파일 트리뷰로 전환",
|
||||
"OpenMergeTool": "Git mergetool를 열기",
|
||||
"Refresh": "새로고침",
|
||||
"Push": "푸시",
|
||||
"Pull": "업데이트",
|
||||
"FileFilter": "파일을 필터하기 (Staged/unstaged)",
|
||||
"CopyToClipboardMenu": "클립보드에 복사",
|
||||
"CopyFileName": "파일명",
|
||||
"CopySelectedDiff": "선택한 파일의 변경점",
|
||||
"CopyAllFilesDiff": "모든 파일의 변경점",
|
||||
"NoContentToCopyError": "복사 대상이 없습니다",
|
||||
"FileNameCopiedToast": "파일명을 클립보드에 복사했습니다.",
|
||||
"FilePathCopiedToast": "파일경로를 클립보드에 복사했습니다.",
|
||||
"FileDiffCopiedToast": "파일의 변경점을 클립보드에 복사했습니다.",
|
||||
"AllFilesDiffCopiedToast": "모든 파일의 변경점을 클립보드에 복사했습니다.",
|
||||
"FilterStagedFiles": "Staged된 파일만 표시",
|
||||
"FilterUnstagedFiles": "Stage되지 않은 파일만 표시",
|
||||
"MergeConflictsTitle": "병합 충돌",
|
||||
"Checkout": "체크아웃",
|
||||
"NoChangedFiles": "변경된 파일이 없습니다.",
|
||||
"SoftReset": "소프트 리셋",
|
||||
"AlreadyCheckedOutBranch": "브랜치가 이미 체크아웃 되었습니다",
|
||||
"SureForceCheckout": "강제로 체크아웃하시겠습니까? 모든 로컬 변경 사항을 잃게 됩니다.",
|
||||
"ForceCheckoutBranch": "브랜치 강제 체크아웃",
|
||||
"BranchName": "브랜치 이름",
|
||||
"NewBranchNameBranchOff": "새 브랜치 이름 (branch is off of '{{.branchName}}')",
|
||||
"CantDeleteCheckOutBranch": "체크아웃하는 브랜치는 삭제할 수 없습니다!",
|
||||
"DeleteBranchTitle": "'{{.selectedBranchName}}' 브랜치를 삭제하시겠습니까?",
|
||||
"DeleteLocalBranch": "로컬 브랜치를 삭제",
|
||||
"ForceDeleteBranchTitle": "브랜치를 강제 삭제",
|
||||
"ForceDeleteBranchMessage": "'{{.selectedBranchName}}'는 완전히 병합되지 않았습니다. 정말 삭제하시겠습니까?",
|
||||
"RebaseBranch": "체크아웃된 브랜치를 이 브랜치에 리베이스",
|
||||
"CantRebaseOntoSelf": "브랜치를 자기 자신에게 리베이스할 수는 없습니다.",
|
||||
"CantMergeBranchIntoItself": "브랜치를 자기 자신에게 병합할 수는 없습니다.",
|
||||
"ForceCheckout": "강제 체크아웃",
|
||||
"CheckoutByName": "이름으로 체크아웃",
|
||||
"NewBranch": "새 브랜치 생성",
|
||||
"NoBranchesThisRepo": "저장소에 브랜치가 존재하지 않습니다.",
|
||||
"CommitWithoutMessageErr": "커밋 메시지를 입력하세요.",
|
||||
"Close": "닫기",
|
||||
"CloseCancel": "닫기/취소",
|
||||
"Confirm": "확인",
|
||||
"Quit": "종료",
|
||||
"SureSquashThisCommit": "Are you sure you want to squash this commit into the commit below?",
|
||||
"Squash": "스쿼시",
|
||||
"PickCommitTooltip": "Pick commit (when mid-rebase)",
|
||||
"Reword": "커밋메시지 변경",
|
||||
"DropCommit": "커밋 삭제",
|
||||
"MoveDownCommit": "커밋을 1개 아래로 이동",
|
||||
"MoveUpCommit": "커밋을 1개 위로 이동",
|
||||
"EditCommitTooltip": "커밋을 편집",
|
||||
"AmendCommitTooltip": "Amend commit with staged changes",
|
||||
"ResetAuthor": "Reset commit author",
|
||||
"RewordCommitEditor": "에디터에서 커밋메시지 수정",
|
||||
"NoCommitsThisBranch": "이 브랜치에 커밋이 없습니다.",
|
||||
"Error": "오류",
|
||||
"Undo": "되돌리기",
|
||||
"UndoReflog": "되돌리기 (reflog) (실험적)",
|
||||
"RedoReflog": "다시 실행 (reflog) (실험적)",
|
||||
"Apply": "적용",
|
||||
"NoStashEntries": "Stash가 존재하지 않습니다.",
|
||||
"StashDrop": "Stash를 삭제",
|
||||
"StashPop": "Stash를 pop",
|
||||
"SurePopStashEntry": "정말로 Stash를 pop하시겠습니까?",
|
||||
"StashApply": "Stash 적용",
|
||||
"SureApplyStashEntry": "정말로 Stash를 적용하시겠습니까?",
|
||||
"StashChanges": "변경을 Stash",
|
||||
"OpenConfig": "설정 파일 열기",
|
||||
"EditConfig": "설정 파일 수정",
|
||||
"ForcePush": "강제 푸시",
|
||||
"ForcePushPrompt": "브랜치가 원격 브랜치에서 분기하고 있습니다. 'esc'를 눌러 취소하거나, 'enter'를 눌러 강제로 푸시하세요.",
|
||||
"ForcePushDisabled": "브랜치가 원격 브랜치에서 분기하고 있습니다. force push가 비활성화 되었습니다.",
|
||||
"UpdatesRejectedAndForcePushDisabled": "업데이트가 거부되었으며 강제 푸시를 비활성화했습니다.",
|
||||
"CheckForUpdate": "업데이트 확인",
|
||||
"CheckingForUpdates": "업데이트 확인 중...",
|
||||
"UpdateAvailableTitle": "새로운 업데이트 사용가능!",
|
||||
"UpdateAvailable": "버전 {{.newVersion}} 을(를) 설치하시겠습니까?",
|
||||
"UpdateInProgressWaitingStatus": "업데이트 중",
|
||||
"UpdateCompletedTitle": "업데이트 완료!",
|
||||
"UpdateCompleted": "업데이트 설치에 성공했습니다. lazygit를 재시작해주세요.",
|
||||
"FailedToRetrieveLatestVersionErr": "버전 정보를 받아오는데 실패했습니다.",
|
||||
"OnLatestVersionErr": "이미 최신 버전을 사용하고 있습니다.",
|
||||
"MajorVersionErr": "새 버전 ({{.newVersion}}) 에 현재 버전({{.currentVersion}}) 과 비교할 때 호환되지 않는 변경 사항이 있습니다.",
|
||||
"CouldNotFindBinaryErr": "{{.url}} 에서 바이너리를 찾을 수 없습니다.",
|
||||
"UpdateFailedErr": "업데이트 실패: {{.errMessage}}",
|
||||
"ConfirmQuitDuringUpdateTitle": "현재 업데이트 중입니다.",
|
||||
"ConfirmQuitDuringUpdate": "현재 업데이트를 진행 중입니다.종료하시겠습니까?",
|
||||
"GitconfigParseErr": "따옴표로 묶이지 않은 '\\' 문자가 있어서 Gogit이 gitconfig 파일을 분석하지 못했습니다. 이를 제거하면 문제가 해결됩니다.",
|
||||
"EditFile": "파일 편집",
|
||||
"OpenFile": "파일 닫기",
|
||||
"IgnoreFile": ".gitignore에 추가",
|
||||
"RefreshFiles": "파일 새로고침",
|
||||
"Merge": "현재 브랜치에 병합",
|
||||
"ConfirmQuit": "정말로 종료하시겠습니까?",
|
||||
"SwitchRepo": "최근에 사용한 저장소로 전환",
|
||||
"UnsupportedGitService": "지원되지 않는 Git 서비스입니다.",
|
||||
"CopyPullRequestURL": "풀 리퀘스트 URL을 클립보드에 복사",
|
||||
"NoBranchOnRemote": "브랜치가 원격에 없습니다. 원격에 먼저 푸시해야합니다.",
|
||||
"FileEnter": "Stage individual hunks/lines for file, or collapse/expand for directory",
|
||||
"StageSelectionTooltip": "선택한 행을 staged / unstaged",
|
||||
"DiscardSelection": "변경을 삭제 (git reset)",
|
||||
"ToggleSelectionForPatch": "Line(s)을 패치에 추가/삭제",
|
||||
"ToggleStagingView": "패널 전환",
|
||||
"ReturnToFilesPanel": "파일 목록으로 돌아가기",
|
||||
"FastForward": "Fast-forward this branch from its upstream",
|
||||
"FoundConflictsTitle": "Auto-merge failed",
|
||||
"RecentRepos": "최근에 사용한 저장소",
|
||||
"CommitSummaryTitle": "커밋메시지",
|
||||
"LocalBranchesTitle": "브랜치",
|
||||
"SearchTitle": "검색",
|
||||
"TagsTitle": "태그",
|
||||
"MenuTitle": "메뉴",
|
||||
"RemotesTitle": "원격",
|
||||
"RemoteBranchesTitle": "원격 브랜치",
|
||||
"PatchBuildingTitle": "메인 패널 (Patch Building)",
|
||||
"InformationTitle": "정보",
|
||||
"ErrorOccurred": "오류가 발생했습니다! issue를 작성해 주세요: ",
|
||||
"CherryPickCopy": "커밋을 복사 (cherry-pick)",
|
||||
"PasteCommits": "커밋을 붙여넣기 (cherry-pick)",
|
||||
"CherryPick": "체리픽",
|
||||
"Donate": "후원",
|
||||
"AskQuestion": "질문하기",
|
||||
"PrevHunk": "이전 hunk를 선택",
|
||||
"NextHunk": "다음 hunk를 선택",
|
||||
"PrevConflict": "이전 충돌을 선택",
|
||||
"NextConflict": "다음 충돌을 선택",
|
||||
"SelectPrevHunk": "이전 hunk를 선택",
|
||||
"SelectNextHunk": "다음 hunk를 선택",
|
||||
"ScrollDown": "아래로 스크롤",
|
||||
"ScrollUp": "위로 스크롤",
|
||||
"ScrollUpMainWindow": "메인 패널을 위로 스크롤",
|
||||
"ScrollDownMainWindow": "메인 패널을 아래로로 스크롤",
|
||||
"DropCommitTitle": "커밋 삭제",
|
||||
"DropCommitPrompt": "정말로 선택한 커밋을 삭제하시겠습니까?",
|
||||
"PullingStatus": "업데이트 중",
|
||||
"PushingStatus": "푸시 중",
|
||||
"FetchingStatus": "패치 중",
|
||||
"SubCommitsDynamicTitle": "커밋 (%s)",
|
||||
"RemoteBranchesDynamicTitle": "원격브랜치 (%s)",
|
||||
"ViewItemFiles": "View selected item's files",
|
||||
"CommitFilesTitle": "커밋 파일",
|
||||
"CheckoutCommitFileTooltip": "Checkout file",
|
||||
"DiscardOldFileChangeTooltip": "Discard this commit's changes to this file",
|
||||
"DiscardFileChangesTitle": "파일 변경 사항 버리기",
|
||||
"Discard": "View 'discard changes' options",
|
||||
"Cancel": "취소",
|
||||
"DiscardAllChanges": "모든 변경사항 버리기",
|
||||
"Delete": "삭제",
|
||||
"Reset": "초기화",
|
||||
"ViewResetOptions": "View reset options",
|
||||
"CreateFixupCommitTooltip": "Create fixup commit for this commit",
|
||||
"SquashAboveCommitsTooltip": "Squash all 'fixup!' commits above selected commit (autosquash)",
|
||||
"PressEnterToReturn": "엔터를 눌러 lazygit으로 돌아갑니다.",
|
||||
"ViewStashOptions": "Stash 옵션 보기",
|
||||
"StashAllChanges": "변경사항을 Stash",
|
||||
"StashOptions": "Stash 옵션",
|
||||
"ScrollLeft": "우 스크롤",
|
||||
"ScrollRight": "좌 스크롤",
|
||||
"DiscardPatch": "Patch 버리기",
|
||||
"ToggleAllInPatch": "Toggle all files included in patch",
|
||||
"ViewPatchOptions": "커스텀 Patch 옵션 보기",
|
||||
"PatchOptionsTitle": "Patch 옵션",
|
||||
"EnterCommitFile": "Enter file to add selected lines to the patch (or toggle directory collapsed)",
|
||||
"EnterUpstream": "'<remote> <branchname>'와 같은 형식으로 입력하세요.",
|
||||
"InvalidUpstream": "Upstream의 형식이 잘못되었습니다.'<remote> <branchname>' 와 같은 형식으로 입력하세요.",
|
||||
"NewRemote": "새로운 Remote 추가",
|
||||
"NewRemoteName": "새로운 Remote 이름:",
|
||||
"NewRemoteUrl": "새로운 Remote URL:",
|
||||
"EditRemoteName": "{{.remoteName}} 의 새로운 Remote 이름 입력:",
|
||||
"EditRemoteUrl": "{{.remoteName}} 의 새로운 Remote URL 입력:",
|
||||
"RemoveRemote": "Remote를 삭제",
|
||||
"DeleteRemoteBranch": "원격 브랜치를 삭제",
|
||||
"SetUpstream": "Set as upstream of checked-out branch",
|
||||
"EditRemoteTooltip": "Remote를 수정",
|
||||
"TagNameTitle": "태그 이름",
|
||||
"TagMessageTitle": "태그 메시지",
|
||||
"PushTagTitle": "원격에 태그 '{{.tagName}}' 를 푸시",
|
||||
"PushTag": "태그를 push",
|
||||
"NewTag": "태그를 생성",
|
||||
"FetchRemoteTooltip": "원격을 업데이트",
|
||||
"GitFlowOptions": "Git-flow 옵션 보기",
|
||||
"NewBranchNamePrompt": "새로운 브랜치 이름 입력",
|
||||
"NextScreenMode": "다음 스크린 모드 (normal/half/fullscreen)",
|
||||
"PrevScreenMode": "이전 스크린 모드",
|
||||
"StartSearch": "검색 시작",
|
||||
"Keybindings": "키 바인딩",
|
||||
"RenameBranch": "브랜치 이름 변경",
|
||||
"OpenKeybindingsMenu": "매뉴 열기",
|
||||
"ResetCherryPick": "Reset cherry-picked (copied) commits selection",
|
||||
"NextTab": "이전 탭",
|
||||
"PrevTab": "다음 탭",
|
||||
"CantUndoWhileRebasing": "리베이스중에는 되돌릴 수 없습니다.",
|
||||
"CantRedoWhileRebasing": "리베이스중에는 다시 실행할 수 없습니다.",
|
||||
"ConfirmationTitle": "확인 패널",
|
||||
"PrevPage": "이전 페이지",
|
||||
"NextPage": "다음 페이지",
|
||||
"GotoTop": "맨 위로 스크롤 ",
|
||||
"GotoBottom": "맨 아래로 스크롤 ",
|
||||
"ResetInParentheses": "(reset)",
|
||||
"OpenFilteringMenu": "View filter-by-path options",
|
||||
"ExitFilterMode": "Stop filtering by path",
|
||||
"MustExitFilterModePrompt": "Command not available in filtered mode. Exit filtered mode?",
|
||||
"EnterRefName": "Ref 입력:",
|
||||
"ExitDiffMode": "Diff 모드 종료",
|
||||
"DiffingMenuTitle": "Diff",
|
||||
"ViewDiffingOptions": "Diff 메뉴 열기",
|
||||
"OpenCommandLogMenu": "명령어 로그 메뉴 열기",
|
||||
"CommitDiff": "커밋의 iff",
|
||||
"CommitHash": "커밋 해시",
|
||||
"CommitURL": "커밋 URL",
|
||||
"CommitMessage": "커밋 메시지",
|
||||
"CommitAuthor": "커밋 작성자",
|
||||
"CopyCommitAttributeToClipboard": "커밋 attribute 복사",
|
||||
"CopyBranchNameToClipboard": "브랜치명을 클립보드에 복사",
|
||||
"CopyPathToClipboard": "파일명을 클립보드에 복사",
|
||||
"CopySelectedTextToClipboard": "선택한 텍스트를 클립보드에 복사",
|
||||
"NoFilesStagedTitle": "파일이 Staged 되지 않았습니다.",
|
||||
"NoFilesStagedPrompt": "파일이 Staged 되지 않았습니다. 모든 파일을 커밋하시겠습니까?",
|
||||
"BranchNotFoundTitle": "브랜치를 찾을 수 없습니다.",
|
||||
"BranchNotFoundPrompt": "브랜치를 찾을 수 없습니다. 새로운 브랜치를 생성합니다.",
|
||||
"DiscardChangeTitle": "선택한 라인을 unstaged",
|
||||
"DiscardChangePrompt": "정말로 선택한 라인을 삭제 (git reset) 하시겠습니까? 이 조작은 취소할 수 없습니다.\n이 경고를 비활성화 하려면 설정 파일의 'gui.skipDiscardChangeWarning' 를 true로 설정하세요.",
|
||||
"CreateNewBranchFromCommit": "커밋에서 새 브랜치를 만듭니다.",
|
||||
"ViewCommits": "커밋 보기",
|
||||
"RunningCustomCommandStatus": "커스텀 명령어 실행",
|
||||
"EnterSubmoduleTooltip": "서브모듈 열기",
|
||||
"CopySubmoduleNameToClipboard": "서브모듈 이름을 클립보드에 복사",
|
||||
"RemoveSubmodule": "서브모듈 삭제",
|
||||
"RemoveSubmodulePrompt": "정말로 서브모듈 '%s'및 해당 디렉토리를 제거하시겠습니까? 이것은 되돌릴 수 없습니다.",
|
||||
"ResettingSubmoduleStatus": "서브모듈를 리셋",
|
||||
"NewSubmoduleName": "새로운 서브모듈이름 :",
|
||||
"NewSubmoduleUrl": "새로운 서브모듈의 URL:",
|
||||
"NewSubmodulePath": "새로운 서브모듈의 경로",
|
||||
"NewSubmodule": "새로운 서브모듈 추가",
|
||||
"AddingSubmoduleStatus": "새로운 서브모듈 추가",
|
||||
"UpdateSubmoduleUrl": "서브모듈 '%s' 의 URL을 업데이트",
|
||||
"EditSubmoduleUrl": "서브모듈의 URL을 수정",
|
||||
"InitializingSubmoduleStatus": "서브모듈 초기화",
|
||||
"InitSubmoduleTooltip": "서브모듈 초기화",
|
||||
"SubmoduleUpdateTooltip": "서브모듈 업데이트",
|
||||
"UpdatingSubmoduleStatus": "서브모듈 업데이트",
|
||||
"BulkInitSubmodules": "서브모듈 일괄 초기화",
|
||||
"BulkUpdateSubmodules": "서브모듈 일괄 업데이트",
|
||||
"SubmodulesTitle": "서브모듈",
|
||||
"SuggestionsCheatsheetTitle": "추천",
|
||||
"SuggestionsTitle": "추천 (press %s to focus)",
|
||||
"ExtrasTitle": "명령어 로그",
|
||||
"PullRequestURLCopiedToClipboard": "풀 리퀘스트의 URL을 클립보드에 복사했습니다.",
|
||||
"CommitDiffCopiedToClipboard": "커밋의 Diff를 클립보드에 복사했습니다.",
|
||||
"CommitURLCopiedToClipboard": "커밋의 URL를 클립보드에 복사했습니다.",
|
||||
"CommitMessageCopiedToClipboard": "커밋 메시지를 클립보드에 복사했습니다.",
|
||||
"CommitAuthorCopiedToClipboard": "커밋 작성자를 클립보드에 복사했습니다.",
|
||||
"CopiedToClipboard": "클립보드에 복사했습니다.",
|
||||
"ErrCannotEditDirectory": "디렉토리는 편집할 수 없습니다.",
|
||||
"ErrStageDirWithInlineMergeConflicts": "병합 충돌이 발생한 파일을 포함하는 디렉토리는 Staged/untaged할 수 없습니다. 병합 충돌을 먼저 해결하세요.",
|
||||
"ErrRepositoryMovedOrDeleted": "저장소를 찾을 수 없습니다. 이미 삭제되었거나 이동되었을 가능성이 있습니다. ¯\\_(ツ)_/¯",
|
||||
"CommandLog": "명령어 로그",
|
||||
"ToggleShowCommandLog": "명령어 로그 표시 여부 전환",
|
||||
"FocusCommandLog": "명령어 로그에 포커스",
|
||||
"CommandLogHeader": "명령어 로그표시 여부는 '%s' 으로 전환할 수 있습니다.\n",
|
||||
"RandomTip": "랜덤 Tip",
|
||||
"ToggleWhitespaceInDiffView": "공백문자를 Diff 뷰에서 표시 여부 전환",
|
||||
"IncreaseContextInDiffView": "Diff 보기의 변경 사항 주위에 표시되는 컨텍스트의 크기를 늘리기",
|
||||
"DecreaseContextInDiffView": "Diff 보기의 변경 사항 주위에 표시되는 컨텍스트 크기 줄이기",
|
||||
"CreatePullRequestOptions": "풀 리퀘스트 생성 옵션",
|
||||
"DefaultBranch": "기본 브랜치",
|
||||
"SelectBranch": "브랜치를 선택",
|
||||
"CreatePullRequest": "풀 리퀘스트 생성",
|
||||
"SelectConfigFile": "설정파일 선택",
|
||||
"NoConfigFileFoundErr": "설정 파일을 찾지 못했습니다.",
|
||||
"LoadingFileSuggestions": "파일 제안 로딩 중",
|
||||
"LoadingCommits": "커밋 로딩",
|
||||
"AbortTitle": "%s 중지",
|
||||
"AbortPrompt": "정말로 실행중인 %s 를 중지할까요?",
|
||||
"OpenLogMenu": "로그 메뉴 열기",
|
||||
"LogMenuTitle": "커밋 로그 옵션",
|
||||
"ShowGitGraph": "커밋 그래프 표시",
|
||||
"SortCommits": "커밋 정렬",
|
||||
"OpenCommitInBrowser": "브라우저에서 커밋 열기",
|
||||
"ViewBisectOptions": "Bisect 옵션 보기",
|
||||
"RewordInEditorTitle": "커밋 메시지를 에디터에서 수정",
|
||||
"ToggleRangeSelect": "드래그 선택 전환",
|
||||
"Actions": {
|
||||
"CheckoutCommit": "커밋 체크아웃",
|
||||
"CheckoutTag": "태그 체크아웃",
|
||||
"CheckoutBranch": "브랜치 체크아웃",
|
||||
"ForceCheckoutBranch": "브랜치 Force 체크아웃",
|
||||
"Merge": "병합",
|
||||
"RebaseBranch": "브랜치 리베이스",
|
||||
"RenameBranch": "브랜치 이름 변경",
|
||||
"CreateBranch": "브랜치 생성",
|
||||
"CherryPick": "(Cherry-pick) 커밋 붙여넣기",
|
||||
"CheckoutFile": "체크아웃 파일",
|
||||
"FixupCommit": "커밋 Fixup",
|
||||
"RewordCommit": "커밋 Reword",
|
||||
"DropCommit": "커밋 Drop",
|
||||
"EditCommit": "커밋 수정",
|
||||
"AmendCommit": "커밋 Amend",
|
||||
"ResetCommitAuthor": "커밋 작성자 Reset",
|
||||
"RevertCommit": "커밋 Revert",
|
||||
"CreateFixupCommit": "Fixup 커밋 생성",
|
||||
"CopyCommitMessageToClipboard": "커밋 메시지를 클립보드에 복사",
|
||||
"CopyCommitDiffToClipboard": "커밋 diff를 클립보드에 복사",
|
||||
"CopyCommitHashToClipboard": "커밋 해시를 클립보드에 복사",
|
||||
"CopyCommitURLToClipboard": "커밋 URL를 클립보드에 복사",
|
||||
"CopyCommitAuthorToClipboard": "커밋 작성자를 클립보드에 복사",
|
||||
"CopyCommitAttributeToClipboard": "클립보드에 복사",
|
||||
"DiscardAllChangesInFile": "Discard all changes in file",
|
||||
"DiscardAllUnstagedChangesInFile": "Discard all unstaged changes in file",
|
||||
"IgnoreExcludeFile": "Ignore file",
|
||||
"Commit": "커밋",
|
||||
"Push": "푸시",
|
||||
"Pull": "업데이트(Pull)",
|
||||
"OpenFile": "파일 열기",
|
||||
"CopyToClipboard": "클립보드에 복사",
|
||||
"CopySelectedTextToClipboard": "선택한 텍스트를 클립보드에 복사",
|
||||
"DeleteRemoteBranch": "원격 브랜치 삭제",
|
||||
"RemoveSubmodule": "서브모듈 삭제",
|
||||
"ResetSubmodule": "서브모듈 Reset",
|
||||
"AddSubmodule": "서브모듈 추가",
|
||||
"UpdateSubmoduleUrl": "서브모듈 URL 업데이트",
|
||||
"InitialiseSubmodule": "서브모듈 초기화",
|
||||
"UpdateSubmodule": "서브모듈 업데이트",
|
||||
"PushTag": "태그 푸시g",
|
||||
"DiscardUnstagedFileChanges": "Unstaged 파일 변경사항 버리기",
|
||||
"RemoveUntrackedFiles": "Untracked 파일 삭제",
|
||||
"RemoveStagedFiles": "Staged 파일 삭제",
|
||||
"Undo": "되돌리기",
|
||||
"Redo": "다시 실행",
|
||||
"CopyPullRequestURL": "풀 리퀘스트 URL 복사",
|
||||
"OpenMergeTool": "병합 도구 열기",
|
||||
"OpenCommitInBrowser": "브라우저에서 커밋 열기",
|
||||
"OpenPullRequest": "브라우저에서 풀 리퀘스트 열기"
|
||||
},
|
||||
"Bisect": {
|
||||
"ResetTitle": "'git bisect' 를 리셋",
|
||||
"ResetPrompt": "정말로 'git bisect' 를 리셋하시겠습니까?",
|
||||
"ResetOption": "Bisect를 리셋",
|
||||
"Mark": "Mark %s as %s",
|
||||
"SkipCurrent": "%s 를 스킵",
|
||||
"CompleteTitle": "Bisect 완료"
|
||||
},
|
||||
"Log": {},
|
||||
"BreakingChangesByVersion": {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ var OutsideRebaseRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
|
|||
Tap(func() {
|
||||
t.ExpectPopup().Confirmation().
|
||||
Title(Equals("Squash")).
|
||||
Content(Contains("Are you sure you want to squash the selected commit(s) into the commit below?")).
|
||||
Content(Contains("Are you sure you want to squash the selected commit(s) into the parent commit below?")).
|
||||
Confirm()
|
||||
}).
|
||||
TopLines(
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ var SquashDownSecondCommit = NewIntegrationTest(NewIntegrationTestArgs{
|
|||
Tap(func() {
|
||||
t.ExpectPopup().Confirmation().
|
||||
Title(Equals("Squash")).
|
||||
Content(Equals("Are you sure you want to squash the selected commit(s) into the commit below?")).
|
||||
Content(Equals("Are you sure you want to squash the selected commit(s) into the parent commit below?")).
|
||||
Confirm()
|
||||
}).
|
||||
Lines(
|
||||
|
|
|
|||
Loading…
Reference in a new issue