Going beyond "save points for code".
Every codebase has a moment where someone deletes the wrong file, breaks a working feature, or ships a change that shouldn't have gone out. Without version control, recovery means hoping someone has a recent copy on their laptop. With Git, recovery is a command.
git log shows you every state your codebase has ever been in — who changed what, when, and why. git diff lets you compare any two points in history to see exactly what shifted. git checkout (or git restore) lets you pull a file — or an entire directory — back from any prior commit. These aren't emergency tools you learn when things break. They're daily tools that make you faster: comparing yesterday's approach to today's, confirming what changed between two deploys, recovering a function you deleted last week.
The teams that treat Git as "just save my code" are leaving the most powerful features unused. Time travel isn't a metaphor — it's a literal capability. Every commit is a snapshot you can revisit, diff against, or restore from. The only requirement is that you commit often enough to have useful snapshots.
Two engineers editing the same file at the same time is the oldest problem in collaborative software work. Before version control, teams used file locks ("I'm editing config.ts, don't touch it"), scheduled editing windows, or simply hoped for the best. All three approaches collapse at scale.
Git solves this with branches. A branch is an isolated copy of the codebase where you can make changes without affecting anyone else's work. You write your feature, your teammate writes theirs, and neither of you sees the other's half-finished code until you're both ready. Merge is the integration point — the deliberate moment where two streams of work combine and any conflicts surface.
This isn't just about preventing stomped files. Branches give you permission to experiment. You can try a risky refactor, decide it's wrong, and delete the branch — no harm done, no revert needed, no commit noise in the shared history. The cost of a failed experiment drops to near zero, which means engineers try more things. Teams that branch well ship faster because they explore more options before committing to one.
Git is a complete audit log of who changed what, when, and — if commits are written well — why. Every line of code in your codebase has an author, a timestamp, and a commit message attached to it via git blame. This isn't surveillance; it's context.
When you find a confusing piece of code, git blame tells you who wrote it and when. The associated commit message tells you why. The associated PR (if your team uses them) gives you the full discussion that led to that decision. This is the difference between "I have no idea why this is here" and "Oh, Sarah added this in March to handle the edge case where the API returns null — here's the ticket."
The audit trail also makes every change reversible. A bad deploy isn't a crisis — it's a git revert away from recovery. A deleted file isn't gone — it exists in every commit before the deletion. The combination of attribution and reversibility gives teams the confidence to move fast. You can ship daily because rolling back is cheap, and you can roll back precisely because you know exactly what changed.
Git is a time machine, not a backup
The point isn't to save your code — Dropbox does that. The point is to navigate every state your code has ever been in, and to merge those states intentionally.