Build1 publisher3 min readPublished
GitHub's Use this template squashes upstream history into a fresh initial commit, so merge and rebase have no base to work from. Cherry-pick does the job, once you declare which files each repo owns.
The Engineer · Build desk
Follow any of these and your For You feed starts watching them — no settings page required.
Compiled by The EngineerSomething wrong?How this is made
Merge and rebase are both defined against a merge base, and a repository created from a template does not have one [8]. `--allow-unrelated-histories` does not manufacture one. It tells git to proceed regardless, at which point every path present in both trees arrives as a conflicting add, because git is looking at two unrelated projects that happen to share filenames [7]. The refusal message accurately describes the repository you asked for [6].
Cherry-pick sidesteps the whole question because it never reconciles histories, it applies a patch [9]. The author runs `git cherry-pick --no-commit`, then rebuilds the commit from the upstream metadata: original author, original date, original message, all read out of the template with `git log -1` [10][11]. That detail is the part worth copying. An rsync of the template tree gives you a single opaque commit called something like "sync with template", dated today, authored by whoever ran the script, and six months later in a bisect those two histories are not the same artifact [12].
The reason a conflict-only protection rule loses a logo is that there is no conflict. A template commit can overwrite the file cleanly, nothing gets arbitrated, no warning prints, and the rule never fires [14]. So ownership has to be declared in two tiers. Files the repo owns outright, logo, favicon, hostnames, `.env`, `docker-compose.yml`, are restored from the repo after every replayed commit whether or not anything conflicted, because there is no sensible three-way merge of a PNG or a hostname [15]. Files it owns partly, a stylesheet that is mostly template plus a local palette, a translations directory, win only on conflict; protect those absolutely and they never receive another upstream fix [16]. Everything else belongs to the template, and each file the template overwrites is printed at the end of the run [17].
At fleet scale, two problems in the replay surface. Cherry-pick refuses a merge commit unless you name a mainline with `-m`, and naming one duplicates content both parents already contributed, so the replay range wants `--no-merges` [18][19]. And a run that dies on commit 14 of 20 must not stop and report, because the repo then holds part of the template's changes while its version file, and every dashboard, script and flag keyed to that file, asserts a state it is not in [20].
One distinct version per 2.4 sites is the census compressed to a single figure [22], and the spread runs across the whole fleet rather than a handful of stragglers. Two thirds of the fleet came in through the button, 68 of roughly a hundred repositories [1][23], and the four sites still on major 1 are about 6% of them [24]. What the post does not measure is how many upstream commits failed to land; the security fix on day 30 and the dependency bump on day 200 are offered as an illustration of the gap, not a log of it [21]. The author's diagnosis puts the cause in the missing mechanism to keep the sites in sync, rather than in any individual or process failure [4]. That reading holds, and it prices the adoption cost honestly: the template repo only ever provided a starting point [5], and whatever you build to be the channel needs a per-repo ownership manifest before its first run [15][16].
Ranked by verification strength, evidence, and original report placement.
The author runs about a hundred repositories, and 68 of them were created by opening a GitHub template repo and clicking Use this template.
Counting which template version each site was actually running found 28 distinct versions live at the same time, from 1.0.0 to 4.35.4.
The author states nobody had been lazy and no process had broken down; the sites diverged because there was never a mechanism for them not to.
A repository created from a GitHub template shares no commit with the template, because GitHub squashes the template's history into a single initial commit in the new repo.
Adding the template as a remote and running git merge template/main fails with 'fatal: refusing to merge unrelated histories'.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Reproducible mechanics, unverifiable fleet
Two very different kinds of claim sit side by side. The git behaviour comes with its commands and its error text -- the squashed initial commit, the refused merge, cherry-pick applying a patch between repositories that share nothing -- and anyone can reproduce it in ten minutes on two throwaway repos. The numbers cannot be checked at all: the 68 sites, the 28 live versions, the branding lost in a week and the 502 rest on one author's word on dev.to, unaccompanied by audit output, a repository link, or an independent voice.
One team, 68 repositories
The practice is genuinely in use rather than proposed: a protect list in .regraft.yml, a Regraft-source trailer written into replayed commits, rules revised twice after real damage. But the user count stops at one team. No other adopter appears, the code is not offered, and there is no release, licence or package for anyone else to pick up.
Claims less than it demonstrates
The framing is a war story from 68 sites, but the constraint documented applies to every repository ever created from a GitHub template, which the post never bothers to claim. The post makes no attempt to oversell what it built: it isn't pitched as a product, backed by a benchmark, or claimed to generalise beyond this one case. The two confessed design failures are given as much space as the working design.
Own tool, nothing to sell
A personal byline on dev.to describing tooling the author appears to have built pulls toward making that tooling look inevitable, and the piece does end on its own conventions -- the protect list, the trailer format. Against that, there's no vendor behind it, no pricing or licence, and no product page, and the author admits twice to getting the design wrong, in ways that cost one site its branding and another its uptime.
Firm on git, thin on the fleet
Confidence splits along the same seam as the evidence. The mechanical core is stable enough to act on — cherry-pick is the operation that needs no merge base, and that is checkable today. The surrounding story of 68 sites, 28 versions and two incidents is coherent, specific and entirely dependent on one author's account, so any conclusion about how often this bites teams at scale is provisional.
build
Adding Git replicas made Datadog's CI fetches slower because every write went to all of them1 publisher
build
One Self-Hosted Setup Cuts a $198 Platform Bill to a $24 Droplet1 publisher
product
Cursor becomes a code host by default, and GitHub's seven outages in 15 days is the opening4 publishers
build
rerere.autoupdate stages a replayed resolution before anyone checks it hit the right file1 publisher
Publishers with included, body-backed reporting in this cluster.
1 article · September 8, 2026