Skip to content

Make a save you can go back to

Verified: 2026-10-13

In developers' words: Git and GitHub: a repository, a commit, a tag

By the end of this level your app has a save on GitHub named v1-works, and when something breaks you type one sentence to go back to it.

TIME: 4 MINPROMPTS: 3 + 4CODE: 0
The moment

"Where did the working version go?"

It worked on Tuesday. You asked for one more thing, and it broke. You pressed Rollback, it said "Rollback completed", and it is still broken. The version that worked is in there somewhere, and you cannot ask for it, because it has no name. That is how a week of work disappears.

Rollback is the platform's autosave: one slot, no name, written over. Developers make their own save before they change anything, give it a name, and go back to it by name when a change breaks something. Your AI tool does it when you tell it to. Three sentences, four minutes, and you keep it for as long as you build.

Why this matters

Without a save, every change is a bet with your whole app

  • The AI changes many files at once, fast, in ways you did not read. One wrong guess and the working version is gone. "Try again" is not undo. It is another guess.
  • The platform's undo is not yours. It saves when it wants, keeps one slot, and cannot tell a good version from a broken one. By the time you need it, it has written over the one you wanted.
  • You hit this wall in days, not years. Developers lost work for decades before this habit stuck. With an AI typing, you make a week of changes in an afternoon, and lose them in a minute.
  • You can't avoid it. Almost all software is kept this way: the apps you use, the tool you are typing into, your own project. Its words will keep turning up in what your AI tells you. Better to learn them now, on purpose, than later, mid-crash.
  • Four minutes now, or a weekend later. After this, "it broke" costs you one sentence.
The map

The level in one picture

One box per word: the repository is 1, a commit is 2, the tag is 3. The yellow note is load.
Step 1

Put a copy of your app on GitHub

A repository is a copy of your app on GitHub, under your own account, not on the platform: your save files, on your own drive, where nothing the platform does can write over them.

On Claude Code or Cursor, open your app's folder in the tool and paste this. On Lovable and Bolt.new it is a button in the project's settings, under "GitHub".

Prompt: Connect this project to a new private GitHub repository under my own account, named after the folder my project is in, whatever that folder is called. When it is done, give me the repository link and tell me which files are not in it, and why.

✓ A link with your name in it, like github.com/your-username/your-app, and .env left out: it holds your secrets. A page asking you to authorise the tool is your own account letting your own tool in. Say yes.

  1. your appa folder
    Before

    Your app: a folder of files on your computer.

  2. SAVE FILESyourPCGitHub
    After the prompt

    The folder is copied into your repository: one copy on your computer, one on GitHub, under your own account. Nothing in the app changes.

Step 2

Save every file, exactly as it is now

A commit is a snapshot of your app: every file at one moment, dated, with a message that says what works.

Replace the part in angle brackets, brackets included, with what you have seen working, like working: home page, contact form, menu. Not checked yet? working: unchecked is a fine message.

Prompt: Save everything exactly as it is right now, as one commit, with the message "working: <what works today, in a few words>". Tell me the commit's short id, then put it on GitHub. If there is nothing new to save, say that you checked, and tell me the latest commit's short id instead and whether it is on GitHub.

✓ One line with a short id, like a1b2c3d working: home page, contact form, menu. Right after step 1 it may say "nothing new to save" and give that commit's id instead. Same thing.

  1. your appa folder
    Before

    Every file of your app, as it is right now.

  2. working:home, contact6 Oct · a1b2c3d
    After the prompt

    One commit in your repository: dated, with your message and a short id like a1b2c3d.

Step 3

Name it something you'll recognise in three weeks

A tag is a name on a commit. The message says what the commit holds; the tag is how you ask for it back. Many commits will say "working:", and only one is v1-works.

Prompt: Name the latest commit v1-works, as a tag, and put the tag on GitHub too, so I can come back to it by that name later. Tell me how I ask you to go back to it.

✓ One line saying v1-works exists, and one sentence on how to go back.

  1. working:home, contact6 Oct · a1b2c3d
    Before

    The commit from step 2, known by its message and its id.

  2. working:Tue 6 Octv1-works
    After the prompt

    The same commit, with the tag v1-works on it. From now on you ask for it by name.

Keep that sentence. It is your load button, and the one line on this page to remember: "go back to v1-works".

Your turn

Break it on purpose, then load the save

Your headline is safe in v1-works, so break it. On purpose. Four prompts, one at a time.

Prompt 1: Change my home page's headline to the word TEST, and save that as a new commit with the message test, on this computer only, not on GitHub.

Prompt 2: What does my home page's headline say right now?

It says TEST, in words. You do not need to start the app.

Prompt 3: Put every file back exactly as it was at v1-works, and throw the test commit away, so my history looks as if it never happened.

It may ask permission for a command with "reset" or "hard" in it. Say yes: it changes only your computer, and v1-works is already on GitHub.

Prompt 4: What does my home page's headline say right now?

Your real one.

  1. TEST
    Prompt 1

    The headline is TEST, in a new commit called test, on this computer only.

  2. TEST?
    Prompt 2

    Asked, the tool reads it back: TEST.

  3. testv1-works
    Prompt 3

    The test commit is thrown away and v1-works is loaded.

  4. Welcome✓
    Prompt 4

    Your real headline is back. That is the undo.

That is your undo. Next Tuesday, when it breaks for real, you type "go back to v1-works" and it is over.

The limit

Loading a save brings back your app, not its data

One limit. Going back to a commit puts your app back. It does not put your users' data back: what they typed stays as it is, good or bad. Level 5 covers the data.

If it didn't work

Common problems

  • It said "nothing to save", or Initial commit.

    Your app had never been saved, so step 1 made the first commit for you. Step 2 then has nothing new, and step 3 tags that first commit. Both are normal.

  • It asked for a name and email.

    Give the ones on your GitHub account and send the prompt again.

  • My app is broken today.

    Make the commit anyway. Start the message with "broken:" instead of "working:", and in step 3 tag it v0-broken. Tag a working commit v1-works once it works again; the next levels go back to v1-works, and it has to be one that works.

  • The copy got the folder's name.

    Rather have your app's name? Add "named sunny-side-cafe instead of the folder's name" to the step 1 prompt, lowercase with dashes. The name is hard to change later.

  • It only knows ids, answered with a command, or the name is not on GitHub.

    The short id from step 2 is the name; write it down where you'll find it. If it answered with a command, ask "what do I say to you to do that?". If the tag exists but not on GitHub, ask "push the tag v1-works to GitHub too".

  • It refused the "reset" command.

    Ask "put the files back the way v1-works has them and move my main line back to it, without that command". A refusal can cancel the other things it was doing in the same breath, so ask what it did before the refusal, and for one step at a time.

  • It said I am "ahead" of GitHub, or mentioned a hidden copy.

    "Ahead" is what "this computer only" means, and prompt 3 puts it right. The hidden copy is harmless and goes on its own. Last, ask "are my saves the same as on GitHub?" It should say yes.

  • Where it is on GitHub.

    Not on the front page. Open the menu that says "main" and switch to Tags: v1-works is there. A small file called .gitignore is the list of what was left out. If .env is on the page, say "take .env off GitHub and keep it out".

  • On Lovable and Bolt.new.

    They commit on their own schedule and list the commits in a version history; each lands in your repository on GitHub. The top entry is your latest commit, and its short id is the name you use. Restoring from the version history is the same undo. Not yet tested there.

The words

Each thing on this page, with its three names

In the game Developers say Plain
your save files repository a copy of your app on GitHub
a save commit every file, right now, dated
the note on a save commit message what works today, in a few words
the name on a save tag v1-works
load "go back to v1-works" go back to a save
autosave rollback the platform's own undo