Skip to main content
commitdog merge merges another local branch into the branch you are on. Before anything touches your history, it shows every mergeable branch with its diff stats and whether the merge would conflict. After a clean merge, commitdog generates a detailed merge commit message from all the commits on that branch, grouped by type, and lets you use it, edit it, or keep git’s default.

Usage

Run it from the branch you want to merge into. commitdog requires a git repository and a checked-out branch (not a detached HEAD).

Merge flow

1

Pick a branch

commitdog lists every other local branch that has changes relative to your current branch, with added and removed lines, file count, and conflict status:
Branches with no changes against your current branch are hidden. The conflict status comes from a dry-run merge that commitdog performs and aborts, so you know before committing to anything.
2

Preview the changes

After you pick a branch, commitdog prints a per-file diff stat (up to 10 files) and offers a full diff view:
Choosing 2 opens a colorized diff, paged 40 lines at a time. Press Enter for more or q to go back to the menu.
3

Merge

Choosing 1 runs the merge with --no-ff, so a merge commit is always created:
4

Review the generated merge commit message

commitdog reads every commit on the merged branch (excluding merge commits) and builds a merge commit message with a summary subject and sections grouped by type: features, bug fixes, security, removed, refactoring, and documentation.
  • Enter amends the merge commit with the generated message.
  • e opens the message in $EDITOR so you can adjust it before it is applied.
  • s skips the generated message and keeps git’s default merge commit message.
5

Push

commitdog confirms the merge and asks whether to push:

Conflict handling

If you pick a branch marked conflict, commitdog warns you before merging:
Choosing 1 starts the merge without committing, lists every conflicted file, and opens them in your editor ($EDITOR, then $VISUAL, falling back to vi). With a single conflicted file, it opens immediately. With several, you pick which file to open:
After you resolve all conflicts, finish the merge manually:
The generated merge commit message is only offered on clean merges. Conflicted merges use the standard git commit flow after you resolve the files.