Get AI summaries of any video or article — Sign up free
The Real Problems w/ Git thumbnail

The Real Problems w/ Git

The PrimeTime·
6 min read

Based on The PrimeTime's video on YouTube. If you like this content, support the original creators by watching, liking and subscribing to their content.

TL;DR

The merge-vs-rebase argument is treated as a symptom of a larger usability problem: Git workflows often force developers to manage conflict and history mechanics instead of focusing on building software.

Briefing

Git sparks a bigger fight than “merge vs rebase.” Across the standup, the central complaint is that version control forces developers to think about internal mechanics—conflicts, history shape, branching rules, and command-line workflows—when most people just want their work saved and shared reliably. One participant’s ideal system is almost hands-off: type a single “done,” have changes automatically available across machines, and only surface conflicts as a clear, later choice instead of interrupting day-to-day coding.

That frustration shows up repeatedly in how people describe failure modes. A “botched rebase” can happen when conflicts derail attention mid-rebase, leading someone to abort and recover by recloning or restoring from a saved state. But the deeper issue isn’t the specific command; it’s the cognitive tax. The discussion argues that Git’s model—where history is arranged through pushes, pulls, merges, rebases, and squashes—turns source control into an ongoing mental project. Even when Git works, the workflow can feel like programmers are “facilitating source code control” rather than writing software.

The standup also contrasts two philosophies for representing change history. One side prefers squashing: compress many intermediate commits into a smaller, coherent change set that should represent a working feature, making later debugging and archaeology more straightforward. The other side defends rebasing as a way to test a feature branch on top of the latest known changes, avoiding the false comfort of merging something that looked good earlier but becomes untrustworthy once new commits land. The debate extends to whether commit granularity matters: some want to preserve the “forensic evidence” of how a change evolved, including imperfect commit messages that encode context like “trying something” or “uncharted territory,” while others treat that detail as noise that distracts from the actual deliverable.

A parallel thread targets GitHub-style workflows and tooling ergonomics. The criticism isn’t only Git’s underlying DAG model; it’s also the user experience—arcane commands, confusing error states, and interfaces that don’t make diffs and review frictionless. The group repeatedly returns to a “Steve Jobs of source control” idea: sane defaults, a small set of commands that cover most needs, and prompts that guide humans only when action is truly required.

Finally, the conversation lands on a pragmatic conclusion: version control is not solved because humans and organizations differ. Large teams need stricter coordination, while small teams can tolerate “let it ride” approaches that preserve multiple versions until someone chooses to reconcile them. Hooks and automation are discussed as potential guardrails, but there’s skepticism that they should block commits broadly—especially when the real goal is preventing shared-area problems like accidental secrets. The episode ends with the view that Git is “the worst system except for all the others,” not because it’s perfect, but because no widely adopted alternative matches its combination of flexibility, tooling, and proven workflows—despite the clear desire for something more transparent and less burdensome.

Cornell Notes

The standup argues that the real problem with Git isn’t the mechanics of merge or rebase—it’s that version control often makes developers manage internal history and conflict states instead of simply saving and sharing work. One participant wants a “transparent” workflow where changes propagate automatically across machines and conflicts are deferred until the user chooses how to resolve them. Another thread defends rebasing as a testing strategy: move a feature branch onto the latest commits so the feature is validated in the same context it will be merged. The squashing debate centers on whether commit history is useful forensic evidence or distracting noise, with different preferences depending on team size and risk tolerance. Overall, the group concludes that version control remains unsolved because human collaboration patterns vary widely across organizations.

Why do “merge vs rebase” debates keep coming up, and what’s the deeper complaint behind them?

The argument isn’t only about which Git operation produces a cleaner history. The deeper complaint is that Git workflows force humans to manage conflict states and history shape while they’d rather focus on building software. That shows up in examples like “botched rebase” situations where conflicts derail attention mid-process, leading to aborts and recovery (sometimes by recloning). Even when the conflict is unavoidable, the workflow still interrupts the developer’s flow—so the debate becomes a proxy for whether version control should be more transparent and less cognitively demanding.

What practical reason does rebasing get credit for in the discussion?

Rebasing is defended as a way to test a feature branch against the latest known code. Instead of merging after testing on an older base (which can become misleading once new commits land), rebasing moves the branch pointer so the feature sits on top of the current head. That way, when the feature is tested, it’s tested in the same context it will be merged into, reducing the chance of “it was fine when I checked, but now it’s broken” surprises.

Why do some participants strongly prefer squashing, and what do they think it improves?

Squashing is framed as a way to make the merged change set represent a coherent, intended “ideal” unit of work—especially for larger teams where debugging depends on reliable history. The squashed commit is treated as the forensic artifact: if something breaks, it’s easier to reason about one packaged change than to undo or bisect through many intermediate commits. The counterpoint is that others want to preserve intermediate commits as encoded context, but the squashing side argues that commit granularity can become noise and increases the burden of archaeology.

How does the “transparent VCS” idea work, and what problem is it trying to remove?

The proposed model is close to “type done and walk away.” Changes would be automatically backed up and available on other machines, with simultaneous edits handled by keeping alternate versions rather than forcing immediate resolution. Conflicts wouldn’t freeze progress; instead, the system would present competing versions later for the user to reconcile when they choose. The goal is to eliminate the need to create branches, pull first, or learn arcane Git workflows just to keep work synchronized.

What limits the “quantum/superposition” approach when scaling beyond small teams?

Even supporters acknowledge scaling challenges: with many developers, overlapping edits become frequent, and the system would need a practical strategy for how many concurrent “versions” can be tracked and reconciled. The discussion suggests that small-team assumptions (frequent communication, lower collision rates, and tolerance for deferred reconciliation) may not hold at large scale, so a different design might be required even if the underlying concept—preserving multiple versions until resolution—is still attractive.

Why are commit hooks treated with suspicion in the conversation?

Commit hooks are viewed as potentially papering over deeper process or training problems. There’s also a usability concern: blocking commits can become disruptive if it prevents developers from pushing their own work to branches, even when the work is intended for review rather than shared production. Hooks are considered more acceptable for narrow safety checks (like preventing secrets from being committed), but broad “you can’t commit” policies are seen as likely to create friction without truly fixing the root causes.

Review Questions

  1. What distinction does the discussion draw between “history shape” debates (merge/rebase/squash) and the broader usability complaint about version control?
  2. How does rebasing change the testing context compared with merging a feature branch as-is?
  3. In the squashing vs preserving-commit-history debate, what kinds of information do participants think commit history should retain (and why)?

Key Points

  1. 1

    The merge-vs-rebase argument is treated as a symptom of a larger usability problem: Git workflows often force developers to manage conflict and history mechanics instead of focusing on building software.

  2. 2

    Rebase is defended as a testing strategy that validates a feature on top of the latest commits, reducing “worked earlier, broke later” surprises.

  3. 3

    Squashing is preferred by some as a way to package a coherent, working change set for easier debugging and archaeology, especially in larger teams.

  4. 4

    Commit history is debated as either forensic value (including imperfect messages that encode context) or distracting noise that increases cognitive load.

  5. 5

    A “transparent VCS” ideal emphasizes automatic synchronization across machines and deferred conflict resolution, aiming to remove the need for developers to learn or operate Git internals daily.

  6. 6

    Tooling and workflow ergonomics (command simplicity, diff/review UX, predictable error states) are repeatedly cited as reasons Git/GitHub can feel unnecessarily burdensome.

  7. 7

    Automation like commit hooks is viewed as acceptable mainly for narrow safety constraints (e.g., secrets) but risky as a broad gate that can hide process problems and disrupt developer flow.

Highlights

The standup’s core critique is that version control shouldn’t demand constant human attention to internal history and conflict states; it should save work automatically and only prompt when action is truly needed.
Rebasing is defended not as “cleaner history,” but as a way to test a feature in the exact context it will merge into—on top of the latest head.
Squashing becomes a philosophy about debugging: one packaged change set can be easier to reason about than many intermediate commits, especially when teams need reliable forensic trails.
The “transparent VCS” vision replaces immediate conflict resolution with alternate versions that users can reconcile later, aiming to keep progress unblocked.
The group lands on a pragmatic stance: Git is imperfect but remains the least-bad option until a widely adopted alternative matches its workflow and tooling maturity.

Topics

  • Git Workflows
  • Rebase vs Merge
  • Squash vs Commit History
  • Version Control UX
  • Conflict Resolution

Mentioned

  • T.J.
  • VCS
  • QA
  • PR
  • DAG
  • WSL
  • CI