How to undo rm, git reset, and other destructive terminal commands

March 2026

Every developer has that moment. You type rm -rf and hit enter a fraction of a second before your brain catches up. Or you run git reset --hard and realize your uncommitted work is gone.

The terminal has no undo. Every other interface has Ctrl+Z. The terminal, where you can do the most damage, has nothing.

Can you recover a deleted file?

rm — the file is gone. Unlike dragging to Trash, rm bypasses it entirely. Forensic tools like testdisk might recover it, but it's unreliable on SSDs.

git reset --hard — pushed commits are on the remote. Unpushed ones might be in git reflog. Uncommitted changes are gone.

mv overwrite — the overwritten file is gone. No recovery.

sed -i — original content is gone. If it was in git, you can checkout the old version.

Recovery after the fact is unreliable. The real solution is prevention.

What people try

rm -i — asks for confirmation. Gets annoying, most people disable it. Only covers rm.

trash-cli / rip — moves files to trash instead of deleting. Only handles rm. You have to remember to use a different command.

Time Machine / backups — periodic. If you deleted a file 30 seconds ago and your last backup was an hour ago, you're stuck.

The shell hook approach

What if the terminal could detect destructive commands and back up the affected files before they run? That's what oops does. A shell hook runs before every command. Safe commands pass through with zero overhead. Destructive ones trigger a backup using hard links — instant, no extra disk space.

$ rm -rf src/ $ oops ✓ Undid: rm -r ~/project/src ↩ restored ~/project/src

AI agents make mistakes too

Claude Code, Cursor, Aider — these run shell commands on your behalf, including rm and git reset --hard. Since they go through the same shell, oops catches them automatically. Read more about protecting your files from AI coding agents.

How hard links make backups instant

oops doesn't copy files — it creates hard links. A hard link is a second reference to the same data on disk. Creating one is instant regardless of file size, and it uses no extra space. When the original is deleted, the data survives through the hard link. See the FAQ and docs for details.

Install

curl -fsSL oops-cli.com/install.sh | bash

macOS and Linux. zsh, bash, fish. Run oops tutorial after installing for an interactive walkthrough. See the full documentation for all commands.

oops-cli.com · GitHub · Docs