Force-push incident (2026-07-16): recovering the auto-closed PRs
Nobody has claimed this yet.
- Dominant language
- C#
- Stars
- 7.8k
- Forks
- 1.2k
- Avg merge
- 2d 17h
- Merged PRs (30d)
- 49
Description
What happened
On 2026-07-16, I was cleaning up the git history (removing large ffmpeg files that made the repo too big). To do this, I force-pushed master. For a short moment, the new history had no commits in common with the open PRs. GitHub saw this and automatically closed about 80 open pull requests.
This was my mistake, and I am sorry for the trouble, especially to those of you who had old work that got closed. master itself is fine and fully fixed. Only the PRs were affected, not the code.
GitHub cannot reopen them
I asked GitHub Support. The answer is clear: once a PR is closed, it is locked and cannot be reopened. The closed state points to a commit that no longer exists after the rewrite. There is no button, API, or support action to bring them back. The only way forward is to open new PRs to replace the closed ones.
The good part: your branches and commits are still safe on your forks.
So no work is lost, it just needs a new PR.
The good side
Even though this is annoying, there's a silver lining: it's time to do a full review of all the open PRs.
After going through all ~80 closed PRs:
- Many were drafts that were not finished. They needed more work or a rebase anyway. Since it needed more work anyway (incl a rebase/merge), reopening a PR should be trivial.
- Some were already done in
masterin another way, or replaced, or not needed anymore. These could be closed anyway. - The PRs that were truly ready to merge are a small, clear group. We can recreate or cherry-pick them quickly.
So let's frame it as a much needed cleanup, not only a loss.
Tracking board
To make the recovery clear and organized, I made a project board:
👉 Force-push PR recovery board
Every closed PR is on it, grouped into columns:
- WIP - re-PR if resuming, unfinished drafts. On hold. Continue them when you want (re-push your branch and open a new PR). If a draft is in fact finished and good to merge, tell us, and we will move it to Triage and treat it like a ready PR.
- Triage / needs decision, finished PRs where we first need to decide if the change still makes sense (to avoid reopening if unnecessary). Let's talk about them.
- Needs recreation, finished PRs that we very likely intended to merge. They just need a new PR.
- Recreated – in review, already re-opened as a new PR (linked on the card).
- Landed on master, already cherry-picked or merged.
- Resolved elsewhere, already in
masteranother way, or done differently. - Obsolete, not needed anymore.
Each card shows the author, area, last commit date, and a short note.
What I did so far
- Told every author with a comment on their closed PR.
- Sorted all ~80 PRs into the columns above.
- Checked each PR against current
masterto find the ones already done or replaced (with proof). This way, nobody is asked to redo work that is already merged. - Cherry-picked a few small, safe fixes directly on master.
- Recreated or rebased some of the finished PRs onto current
master(I can push them as branch if necessary). - Left out the Dependabot PRs, those reopen by themselves.
What we need from you
- If your PR is in "Needs recreation": please open a new PR from your branch, rebased on the latest
master. Your commits are still on your fork. - If your PR is in "Triage": it may or may not still be needed. Let's first decide if the change still makes sense. Anyone can join this discussion: the author, the maintainers, or other contributors. Comment here or on the card. If we agree it is still useful, then we recreate it.
- If it is a draft you still want: just re-push and open a new PR when you are ready. No rush, and no need to ask. (See also About drafts below, we may change how drafts work in the future.)
- If it is marked "Resolved elsewhere" or "Obsolete" and you do not agree: please comment here. These are my best guesses, and I am happy to fix them.
Need help recreating your PR?
If rebasing your branch or opening a new PR is hard, just ask, I am happy to help.
I can rebase and recreate the PR for you, or give you simple step-by-step instructions. Either way, you stay the author of your commits.
About drafts (for the future)
This also showed a real problem: we have many old drafts. Some were never finished. Some were only experiments or early ideas that will probably never be merged. To avoid this pile-up again, we can talk about how we use drafts. For example, we could auto-close a draft PR if it gets no update or answer for a long time (the author can always reopen it later). Ideas and opinions are welcome.
Sorry again for the trouble. Thank you for your patience, and for helping Stride. 🙏
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the Force-push PR recovery board and compare the affected closed PRs with the current master branch. For each entry, determine whether it belongs in triage, needs recreation, or is already resolved; done means the board accurately reflects the PR's status and any still-needed change has a new PR.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- git, github
- Domain
- developer-experience
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100