gitwtfhub

wtf is squash-is-for-savages?

jpbochi/squash-is-for-savages — explained in plain English

Analysis updated 2026-08-10 · repo last pushed 2026-07-17

Audience · developerComplexity · 1/5ActiveSetup · easy

TL;DR

A persuasive essay arguing that teams should use merge commits instead of squash-merging when integrating Git branches, because squashing destroys the real history of how work evolved.

Mindmap

mindmap
  root((repo))
    What it is
      Long-form essay
      Opinion piece
      Not a software tool
    Core argument
      Against squash merging
      For merge commits
      History preservation
    Key points
      Squashing destroys history
      Clean commits before merge
      Linear history is overrated
    Recommendation
      Use semi-linear merge
      Good merge bubbles
      Rebase before merging
    Audience
      Engineering teams
      Tech leads
      Git users

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Why would anyone build with this?

REASON 1

Read the essay to decide whether your team should use merge commits instead of squash-merging.

REASON 2

Use the arguments to convince your tech lead to switch from squash-merging to semi-linear merge commits.

REASON 3

Reference the essay when writing your team's Git workflow guidelines.

What's in the stack?

GitMarkdown

How it stacks up

jpbochi/squash-is-for-savages000madz000/rfid-attendance00kaku/gallery-slider-block
LanguageTypeScriptJavaScript
Last pushed2026-07-172024-07-222021-05-19
MaintenanceActiveDormantDormant
Setup difficultyeasyeasyeasy
Complexity1/52/52/5
Audiencedeveloperdevelopergeneral

Figures from each repo's GitHub metadata at analysis time.

How do you spin it up?

Difficulty · easy Time to first run · 5min

No setup needed, this is an essay, not software.

Wtf does this do

This repository isn't software, it's a long-form essay arguing for a specific approach to merging code in Git. The author, JP Bochi, makes the case that teams should use "merge commits" rather than "squash-merging" when integrating a branch of work back into the main codebase. Here's the core disagreement. When a developer finishes work on a feature branch and merges it into the main branch, they have choices about how to handle the commit history. "Squash-merging" collapses all the individual commits from that branch into a single commit, producing a clean, linear history on the main branch. The author argues this is "history destruction." The alternative, merge commits, preserves the branch's individual commits but wraps them in a merge commit that ties them together. The author prefers this because it keeps the full record of how the work evolved. The essay walks through several common arguments in favor of squash-merging and pushes back on each. For instance, people often say squash-merging is better because branches contain messy, throwaway commits (typos, "WIP" messages, debugging tweaks). The author's response: clean up your commits before merging, the same way you'd clean up your code. He argues that knowing squash will happen anyway fosters a culture of not caring about commit quality. He also pushes back on the idea that squash-merging produces a "perfectly linear history" that's some kind of golden ideal, branching is unavoidable in real-world development, and pretending otherwise is utopian. The practical recommendation is straightforward: use the "merge commit with semi-linear history" option in GitLab (or the equivalent in GitHub), which forces a rebase before merging and creates what the author calls "good merge bubbles." He's not against squashing individual commits when it makes sense, he's against a blanket policy that squashes every branch by default. This is aimed at engineering teams and tech leads deciding on their Git workflow. It's a opinion piece, not a tool, and it's written for people who already use Git and want to think carefully about how their team's merge strategy affects code history, debugging, and commit culture.

Yoink these prompts

Prompt 1
My team currently uses squash-merging by default. Write a proposal for switching to semi-linear merge commits, citing arguments about history preservation and commit culture quality.
Prompt 2
Help me write a Git branching and merging policy that follows the 'merge commits with semi-linear history' approach, including rules for when individual commits can be squashed.
Prompt 3
My coworkers argue squash-merging keeps our Git history clean and linear. Draft a response explaining why preserving individual commits in merge bubbles gives better debugging context.
Prompt 4
Compare the trade-offs between squash-merging and merge commits for a 10-person engineering team, focusing on code review, debugging, and commit message quality.

Frequently asked questions

wtf is squash-is-for-savages?

A persuasive essay arguing that teams should use merge commits instead of squash-merging when integrating Git branches, because squashing destroys the real history of how work evolved.

Is squash-is-for-savages actively maintained?

Active — commit in last 30 days (last push 2026-07-17).

How hard is squash-is-for-savages to set up?

Setup difficulty is rated easy, with roughly 5min to a first successful run.

Who is squash-is-for-savages for?

Mainly developer.

View the repo → Decode another repo

This repo across BitVibe Labs

Don't trust strangers blindly. Verify against the repo.