Developer Handbook

Merging

Squash merge strategy, commit message format, and post-merge checklist

Merging

We use squash merges for all PRs. This means all your individual commits—including the "fix typo" and "oops forgot this" commits—get combined into a single, clean commit when merged to master.

Why Squash Merge?

Squash merging gives us several benefits:

Clean history - Master shows one commit per PR, not all the "fix typo" and "actually fix typo" commits
Easy to understand - Each commit represents a complete, coherent change
Simple to revert - Undo an entire feature with one revert instead of tracking down 47 commits
Good messages - You craft a polished commit message at merge time, not in the heat of development

Your branch keeps all the individual commits for reference. Master gets a clean, linear history that's easy to follow.

Squash Commit Message Format

When you squash merge, GitHub prompts you for a commit message. This is your chance to write a clean, polished message that explains what the PR accomplished:

<type>: <summary> (#PR-number)

* Key change 1
* Key change 2
* Key change 3

Superthread Card: [URL]

Here's a real example:

feat: add link archival endpoint (#42)

* Implement POST /api/v1/links/:id/archive endpoint
* Add database migration for archived_at column
* Include validation and tests
* Update API documentation

Superthread Card: https://app.superthread.com...

The bullet points summarize what changed. The Superthread card link connects the code to the project card.

Merge Checklist

One last check before clicking the merge button:

  • All CI checks pass
  • PR is marked "Ready for review" (not draft)
  • Self-review is complete
  • External reviews are approved
  • All review feedback has been addressed
  • Tests pass
  • No linter errors
  • Superthread card is linked

After Merging

Your code is now in master. A few housekeeping tasks:

  1. Delete the branch - GitHub offers a button right after merge. Click it. No need to keep the branch around once it's merged.

  1. Check Superthread - The card should update automatically to reflect the merge
  2. Pull master locally - Get the merged changes:
git checkout master && git pull

Sometimes things don't go smoothly. If you run into issues, check out the troubleshooting section.