Where did ChatGPT’s message version arrows go?
If you used to edit a prompt in ChatGPT and then click the little < 2/3 > arrows above the message to flip between versions, you may have noticed they are not there any more. The same applies to regenerated answers: the older replies used to be reachable, and now they are not.
The good news, and the reason for this article: nothing was deleted. Every version you ever wrote is still in your account data, and you can get all of it back today. It just takes a detour through the data export.
What the arrows did
ChatGPT does not store a conversation as a list of messages. It stores it as a tree. When you edit a prompt, the edited version does not overwrite the original — it is added as a second child of the same parent message. Regenerating an answer does the same thing on the assistant side.
The arrows were the interface to that tree. They moved you between sibling branches. Remove the arrows and the branches are still there; you simply have no way to reach them from the web app.
Why this bothers people more than it sounds like it should
Reading the complaints, the pattern is consistent, and it is not nostalgia for a button:
- The first answer was the good one. You regenerated hoping for better, got worse, and now cannot go back. This is the most common version and the most painful.
- The original prompt was the record. People editing a prompt to refine it lose the exact wording that produced a result they had already used somewhere.
- Comparison was the point. Anyone using ChatGPT to draft variations was using the branches as a working surface, not an archive.
What is actually in your export
Request your data (Settings → Data controls → Export data), unzip it, and open
conversations.json. Each conversation contains a mapping object keyed
by message ID, plus a current_node pointing at the message the app was last showing
you. Simplified, an edited prompt looks like this:
"mapping": {
"aaa2...": {
"id": "aaa2...",
"message": { "author": { "role": "assistant" }, "content": { "parts": ["..."] } },
"parent": "aaa1...",
"children": ["bbb-old", "bbb-new"]
},
"bbb-old": { "parent": "aaa2...", "children": ["ccc-old"], "message": { ... } },
"bbb-new": { "parent": "aaa2...", "children": ["ccc-new"], "message": { ... } }
},
"current_node": "ccc-new" bbb-old is the version you edited away from. It is still there, with everything that
followed from it. The app is simply walking back from current_node through
parent links, rendering that one path, and ignoring the rest.
This is why the arrows could be removed without any data loss, and why the loss is entirely a matter of interface rather than storage.
How to read the old versions
You have three options, in increasing order of effort:
- Open the export in a viewer that understands the tree. Our ChatGPT export viewer follows the same path ChatGPT displays, then marks every fork so you can expand the versions you moved away from. It labels each one as an earlier prompt or a discarded reply, and can write them into a Markdown export. It runs in your browser and the file is never uploaded, which matters for a file like this.
- Search the raw JSON. If you only want one specific lost answer and know a phrase from
it, opening
conversations.jsonin an editor that can handle large files and searching for that phrase will find it. Ugly, but effective for a single rescue. - Write a script. Walk
mapping, find nodes whose parent has more than one child, and print the siblings that are not on the path fromcurrent_node. This is about twenty lines in any language.
The catch, stated plainly
The export contains what was in your account at the moment you requested it. So:
- If you have not exported yet, do it now — before you need it. The versions are still there, but only for as long as the conversations are.
- A deleted conversation is genuinely gone. Branch recovery only works for chats still in your account when the export ran. No tool can retrieve a chat you deleted before exporting, and anything claiming otherwise is worth treating with suspicion.
- The export is a snapshot, not a live view. Anything since your last export is not in it.
- Order between siblings is approximate. The file records which path is current, but not the sequence in which you tried the others. Where a fork has several alternatives, timestamps are usually — not always — the order you created them.
If you just want the arrows back
We cannot give you those; that is OpenAI's to restore. If it matters to you, the constructive move is to say so in the OpenAI developer community, where the existing threads on this are the clearest signal of how many people relied on it.
In the meantime the data is yours and it is all still there. Export it, open it with something that reads the tree rather than a flat list, and nothing is lost.