jesseduffield/lazygit · error

Feature not available for users using GPG. If you are using

Error message

Feature not available for users using GPG.

If you are using a passphrase agent (e.g. gpg-agent) so that you don't have to type your passphrase when signing, you can enable this feature by adding

git:
  overrideGpg: true

to your lazygit config file.

What it means

Returned by LocalCommitsController.reword when Git config requires a GPG subprocess for signing (NeedsGpgSubprocessForCommit) and the target commit is not the HEAD commit. Rewording a non-HEAD commit happens inside an interactive rebase, where lazygit cannot spawn the interactive gpg signing helper, so the feature is disabled with instructions to set git.overrideGpg if a passphrase agent makes signing non-interactive.

Source

Thrown at pkg/gui/controllers/local_commits_controller.go:842

				},
				Tooltip: self.c.Tr.FixupDiscardMessageTooltip,
			},
			{
				Label: self.c.Tr.FixupKeepMessage,
				Keys:  menuKey('c'),
				OnPress: func() error {
					return self.updateTodosWithFlag(todo.Fixup, []*models.Commit{commit}, "-C")
				},
				Tooltip: self.c.Tr.FixupKeepMessageTooltip,
			},
		},
	})
}

func (self *LocalCommitsController) reword(commit *models.Commit) error {
	commitIdx := self.context().GetSelectedLineIdx()
	if self.c.Git().Config.NeedsGpgSubprocessForCommit() && !self.isHeadCommit(commitIdx) {
		return errors.New(self.c.Tr.DisabledForGPG)
	}
	commitMessage, err := self.c.Git().Commit.GetCommitMessage(commit.Hash())
	if err != nil {
		return err
	}
	if self.c.UserConfig().Git.Commit.AutoWrapCommitMessage {
		commitMessage = helpers.TryRemoveHardLineBreaks(commitMessage, self.c.UserConfig().Git.Commit.AutoWrapWidth)
	}
	self.c.Helpers().Commits.OpenCommitMessagePanel(
		&helpers.OpenCommitMessagePanelOpts{
			CommitIndex:      commitIdx,
			InitialMessage:   commitMessage,
			SummaryTitle:     self.c.Tr.Actions.RewordCommit,
			DescriptionTitle: self.c.Tr.CommitDescriptionTitle,
			PreserveMessage:  false,
			OnConfirm:        self.handleReword,
			OnSwitchToEditor: self.switchFromCommitMessagePanelToEditor,
		},

View on GitHub (pinned to c477a2959b)

Solutions

  1. Add 'git:\n overrideGpg: true' to the lazygit config file if a passphrase agent (gpg-agent) handles signing without prompting.
  2. Reword only the HEAD commit, or do the interactive rebase outside lazygit (git rebase -i) where GPG can prompt.
  3. Disable commit signing for the session (git -c commit.gpgSign=false ...) if signing is not required.

Example fix

# before
# ~/.config/lazygit/config.yml (absent)

# after
git:
  overrideGpg: true
Defensive patterns

Strategy: validation

Validate before calling

if self.c.Git().Config.NeedsGpgSubprocessForCommit() && !self.isHeadCommit(idx) {
    return self.c.Confirm(/* suggest setting git.overrideGpg */) // or block
}

Prevention

When it happens

Trigger: Invoking reword on any commit below HEAD while commit signing (commit.gpgSign / GPG setup) is active and NeedsGpgSubprocessForCommit() is true; isHeadCommit(commitIdx) is false.

Common situations: User has GPG signing configured globally and tries to reword an older commit to trigger an implicit interactive rebase; users with gpg-agent who could actually sign non-interactively but lack the lazygit overrideGpg setting.

Related errors


AI-assisted analysis of jesseduffield/lazygit@c477a2959b (2026-08-15). Data as JSON: /api/errors/ca305309edaa951b. Report an issue: GitHub.