Skip to main content
Discard discards changes you haven’t committed; Undo/Redo reverses the Git operation you just performed in the app.

Discard: throwing changes away

This cannot be undone, so it always goes through a confirmation modal.
1

Choose what to discard

Hover over a file row in the Working copy panel and click the × button that appears. If you have multiple files selected, the discard applies to the whole selection. The Conflicted section has no such button.
2

Discard in the confirmation modal

The Discard changes? modal lists the files that will be discarded. Click Discard to run it.
The Discard changes? confirmation modal, with one file that will be discarded (.github/workflows/release.yml) listed with a modified (M) indicator, and the Cancel and red Discard buttons below
Tracked files are restored to their last-committed state, but untracked (new) files are deleted from disk entirely. In that case, the modal warns that this cannot be undone.
You can also discard just a hunk with the Discard button that appears when you hover over a change in the diff.
Hunk discard is only available on unstaged changes. For staged changes, Unstage them first. The button doesn’t appear for new files, for files deleted entirely, or while Ignore whitespace changes is on. Discard those at the file level instead.

Undo / Redo: reversing an operation

Click the Undo (↩) and Redo (↪) buttons at the left of the header toolbar. Hover over one and a tooltip shows which operation it will undo or redo.
The full screen, with the Undo and Redo icons at the left of the header toolbar. There's an operation to undo, so the Undo icon is bright and the Redo icon is dimmed, and an action-completed toast is showing in the bottom right

What you can undo

Undo targets operations that change a ref (branch, tag, or HEAD).
  • Commit, Amend, and Squash
  • Merge, rebase, reset, cherry-pick, and revert
  • Checkout
  • Creating, deleting, or renaming a branch
  • Creating or deleting a tag
  • Stage/Unstage, Discard, stash
  • push, pull, fetch, and other remote syncing
  • Submodule operations, and creating or deleting worktrees
  • A merge, rebase, cherry-pick, or revert that ended in a conflict (handled with Abort/Continue)
If you undo a commit, Amend, or Squash, it performs a soft reset, so the changes remain staged. If you undo a merge, rebase, cherry-pick, or revert, it runs a hard reset; if there are uncommitted changes, a confirmation modal appears first, and continuing discards those changes.

Behavior worth knowing

  • The undo stack remembers up to 20 operations, kept separately for each worktree.
  • The stack lives only in memory, so it’s cleared when you restart the app.
  • If the repository changes outside the app (from the terminal, for example), the affected entry is discarded and a notification appears.
  • Undo/Redo is disabled while a merge or rebase is in progress.
Operations outside the stack can’t be undone. In that case, git reflog in the terminal is the last resort.