Back to features
Git-aware recovery

Undo your Git actions.Keep your momentum.

Commit+ keeps a reversible history for the Git work you do in the app, so you can experiment with branches, commits, staging, remotes, and Git Flow without rebuilding the state by hand.

Undo history

0 of 3 actions completed

⌘Z

Stage selected lines

src/UndoManager.swift

Next

Commit changes

Add recovery flow

Queued

Create branch

feature/undo

Queued

Apply an action to see it enter the undo history.

What you can undo

A safety net across the workflow.

Each completed action becomes one understandable entry you can step back through.

Files & staging

Move changes between your working tree and index without losing the path back.

  • Stage and unstage files
  • Stage and unstage individual hunks
  • Stage and unstage selected lines
  • Discard or remove files, then restore them from a snapshot

History operations

Try a history operation, then step back cleanly when the result is not what you wanted.

  • Undo commits and squash operations
  • Reset HEAD with the right safety checks
  • Undo cherry-pick, merge, rebase, revert, and checkout

Branches & remotes

Branch and remote actions keep a reversible entry in the same Git-aware history.

  • Create, delete, and rename local branches
  • Undo pull and publish/push operations
  • Restore upstream tracking when a branch is recreated

Stashes

Stash changes to switch context, then undo the stash action as a single step.

  • Save working tree changes
  • Undo apply, pop, and drop stash actions
  • Restore the original stash payload when possible

Git Flow & worktrees

Undo Git Flow Start and Finish flows, including linked worktree creation.

  • Undo Start in the current working copy
  • Remove and recreate Git Flow worktrees
  • Reverse Finish merges, tags, and source-branch changes

Undo with guardrails.

Commit+ checks the expected HEAD, branch tip, clean state, worktree path, and lock state before destructive recovery operations. If the repository moved, the action stays in your Undo stack and explains why it cannot continue.

Cmd-Z stays in context.

Git actions use the repository undo history, while typing and conflict-resolution edits stay scoped to their own editor context. The command always acts on the thing you are currently changing.