forcepush-ghost

Upstream wiped it. The fork still remembers.

● Green = still on the default branch. ✕ Red = wiped by a force-push.

Dual rail: upstream wiped tip vs fork still alive on the same SHA
Same SHA: upstream ✕ / fork ● · Path B primary · this page = offline fixtures

10 seconds — how to play

  1. Watch the GIF: same SHA — upstream ✕ wiped / fork ● alive (Path B). Classic scandal fixtures still below.
  2. Pick a fixture below → hit Replay wipe.
  3. Forward this page — offline fixtures only (not a live scan of a real repo).
  4. Live CLI (after clone): try showcase mrdoob/three.js below, or any owner/repo — Events + compare; failures never fake a fixture.

Fork still remembers (offline) — V0.2 preview

Upstream wiped it. The fork still remembers.

Same SHA: upstream ✕ / fork ●. Pick Fork-witness A below for the dual rail. Offline fixtures only — not a live upstream↔fork compare. Live --vs is CLI-only (clone then node bin/forcepush-ghost.js mrdoob/three.js --vs alteredq). Pages never runs live --vs / --vs auto. No restore.

Dual rail: upstream wiped tip vs fork still alive on the same SHA

Try showcase — real public repo

This page stays offline fixtures. For a live red ✕ on a real repo (verified on v0.1.6+):

git clone https://github.com/CAOShurong/forcepush-ghost.git
cd forcepush-ghost
node bin/forcepush-ghost.js mrdoob/three.js
mrdoob/three.js ↗

Expect real ✕ WIPED rewrite signals (Events + compare). Alt: pocketbase/pocketbase (CLI-only fork-witness: --vs fondoger). Live fork-witness (CLI only): --vs alteredq on three.js — Pages never runs live --vs / --vs auto. Failures never substitute a fixture. Story/timeline only — not a scanner.

Share this (copy/paste)

Upstream wiped it. The fork still remembers… pick Fork-witness A — https://caoshurong.github.io/forcepush-ghost/demo/ (offline dual-rail; story, not a scanner).

Real-world shape (sanitized in fixtures)

Names/SHAs here are fictional. Not live scans of jenkinsci/* or CocoaPods/Specs. GitHub Activity can show a force-push before SHA — same shape as our ✕ rail; we do not replace Activity and we do not offer restore.

This page = offline fixtures only. Live scan: clone then node bin/forcepush-ghost.js owner/repo (npx after npm publish).

    ● alive on branch ✕ wiped by force-push