Rebase
Mergepond rebases the current branch onto another in one step, and offers an interactive rebase as a sheet: a list of commits you reorder, reword, squash, fix up, drop or stop at. If the rebase stops on a conflict, a banner takes over until you continue or abort.
Where to find it
- Sidebar › Branches: right-click a branch for Rebase current onto branch and Interactive rebase onto branch…
- History: right-click a commit for Rebase current onto it, or Interactive rebase from here…
- Command palette › Merge and rebase: Rebase current onto branch, Interactive rebase onto branch…; and under the selected commit, Interactive rebase from.
Plain rebase
Rebase current onto branch runs git rebase with that branch as the new base. When it finishes, a toast reads "Rebased name onto branch." with Undo, which moves the branch back to where it was. If there is nothing to do, "name is already based on branch." If a commit conflicts, the rebase pauses and the Changes tab opens with the conflicted files; see below.
Merge works the same way from the same menus: Merge branch into current, with "Merged branch into current." or "current already has everything in branch."
The Interactive rebase sheet
The sheet is headed "Interactive rebase" with the line "N commits on branch after base, oldest first. Drag to reorder; squash and fixup join the commit above." It reads "Reading the commits…" while it loads.
Each row is a commit with its action, chosen from a menu or with a key while the row is focused:
| Action | Key | What it does |
|---|---|---|
| pick | p | Keep the commit as it is. |
| reword | r | Keep the changes, edit the message. A field opens under the row. |
| squash | s | Join into the commit above and combine the messages. A field opens; leave it empty to combine both messages. |
| fixup | f | Join into the commit above and keep only its message. |
| drop | d | Leave the commit out. |
| edit | e | Stop the rebase at this commit so you can change it, then continue. |
| Reordering | How |
|---|---|
| Drag a row | Move it up or down the list. |
| ⌥↑ ⌥↓ | Move the focused row one step. |
Start rebase is disabled until the plan differs from plain picks in the original order. The sheet refuses two plans:
- "The first commit can't be squashed, because there's nothing before it to join. Move it down or pick it." (and the same for fixup).
- "Dropping every commit leaves branch at base. Keep at least one, or reset the branch instead."
The range can't include a merge commit; Mergepond declines to plan a rebase across one.
While a rebase is paused
When a rebase stops, a banner appears above the Changes tab: "Rebasing onto base, step n of m: summary". Its status line reads one of:
- "Stopped so you can edit this commit. Change it, then continue." after an edit action.
- "N files still have conflicts."
- "Every conflict is resolved."
- "Ready to continue."
Buttons: Show conflicts, Abort, Skip ("Leave this commit out and go on"), and Continue rebase. Continue opens the Continue the rebase sheet with the commit message to use (⌘⏎ confirms). The same commands sit in the palette's In progress group: Continue the rebase, Skip commit, Abort the rebase, Show N conflicted files.
Resolving the conflicts themselves is described on Conflicts. When the rebase finishes, the toast reads "Finished the rebase." with Undo, or "Finished the rebase. There was nothing left to apply."
Free and Pro
Rebase and interactive rebase work the same on Free and Pro.