A 15-minute game of Git for your team
Paste one link into the channel. Five seats, no accounts, nothing to install. In a quarter of an hour the team has pushed over each other, been rejected in Git's own words, and read the scoreboard together. Here is how to run it inside a meeting you already have, and what it tends to show.
Three lengths
-
Fifteen minutes, in a meeting
60-second days. Twelve days at most, fewer minutes than that, since a day closes the moment every pack is in. Keep three minutes for the scoreboard.
-
An hour, at lunch
5-minute days: time to think and to talk between days, which is where the conversation about
--forcehappens on its own. -
A week, between standups
24-hour days, one pack a day, seven days. The game for a team across time zones: the day's packs resolve together when the day closes, in a random order, so nobody's morning sends first.
The runbook
- One person opens a room at /play, picks the day length, and adds bots for any seats that will stay empty.
- Paste the room's link. Whoever opens it takes a seat. There are no accounts: a device gets a made-up handle, and anyone who wants their own name on the scoreboard can link a GitHub account.
- The host starts the game. Every day, everyone writes a pack: three ops and up to four commands.
-
When someone ships
v1.0, CI flips every commit face-up and the scoreboard says who won and what decided it. Any day can be replayed afterwards, which is the part to put on the screen.
Three questions for the three minutes after
-
Who pushed without pulling? In the game it costs an op and prints
! [rejected]; in your repository it is the branch that always needs a rebase before it merges. My push was rejected is the two-command fix. -
Who forced, and who had a
reflogready? A sin token here; on a shared branch, an afternoon nobody enjoys. Someone force-pushed over my commit is the way back, including the pull that would quietly lose it. -
Who played
blame, and what did CI find? Bugs are hidden on cards until the release flips them, so this is the review conversation: what gets looked at before it ships. Who broke main is the honest version of the command's name.
Seven conventions, each with its page
- Pull before you push, and set
pull.rebaseonce (why). -
Never force-push a shared branch, and protect
main. On a branch of your own, after a rebase,--force-with-lease(why). - Undo on
mainwith a revert, never a reset (why). -
Resolve conflicts by hand where both sides matter;
-X oursor-X theirsonly when one side is known to be right (why). - Branches live days, not weeks. Small commits, pushed often, so every pull is a fast-forward or close to it.
- Blame the commit, not the person (why).
- Write the commit message for whoever reads
git loga year from now.
The longer versions are on their way: rebase or merge as a team policy, trunk-based development against GitHub Flow and Gitflow, and branch protection.
What's under it
Nothing you would have to explain away. The rules are Git's, and every command prints Git's output, captured from a real Git (what Git said). There are no turns: everyone writes a pack for the day, and the remote resolves the day's packs together when it closes, in a random order, so being first to send wins nothing. No accounts, no ads, open source under the AGPL. A private space for an org, team leaderboards and a workshop mode are on the roadmap; the feedback box at every scoreboard reaches the maintainer.