The safe-change workflow
The single most reliable pattern for non-trivial work is the same every time: plan before you edit. Press Shift+Tab to enter plan mode, let Claude read the relevant code and propose an approach, refine the plan in plain English, approve it, then switch to acceptEdits mode so Claude can execute the agreed plan without prompting on every file.
Plan mode — Shift+Tab puts Claude in read-only planning. It investigates without touching files.
Understand & refine — read the proposed approach and correct it before any code is written.
Approve — once the plan is right, accept it.
acceptEdits mode — let Claude execute the approved plan end to end.
> [Plan Mode] Analyze the payment module and plan how to add
support for Stripe webhooks.
Review the plan, then steer it: "The webhook handler should use our existing error middleware, not a new one." Only once the plan matches your intent do you approve and execute.
Checkpoints: your undo button
Before every file edit, Claude snapshots the current state. If a change goes sideways, you can rewind instantly — no commit required and nothing lost.
Esc Esc
Press Esc twice to rewind to before the last edit.
Ask to undo
Just say "Undo the last change" and Claude reverts it.
Independent of git
Checkpoints are local and don't require a commit — they exist alongside git, not inside it.
Reviewing diffs before you trust them
Never commit what you haven't read. Ask Claude to surface and explain exactly what changed — and to flag anything that looks risky before it lands.
> Show me what changed since the last commit.
> Review the changes we just made and tell me if anything looks risky.
In the VS Code extension and the Desktop app you get visual side-by-side diff views. In the terminal, Claude can run git diff and walk you through every change in context.
Committing safely
Good commits are small and logical. Claude can stage selectively and split unrelated work into separate commits so your history stays clean and reviewable.
> Commit these changes with a descriptive message following our
conventional commits format.
> Create a commit for just the payment module changes, not the
unrelated lint fixes.
> Stage only the test files and create a separate commit.
Common mistakes vs. best practices
Common mistakes
- Running large autonomous changes without a clean git state first
- Skipping plan mode for multi-file architectural changes
- Committing without reviewing the diff
Best practices
- Always start with a clean
git statusbefore large tasks - Use
git stashbefore exploratory experiments - Commit small, logical units rather than one giant change
Related tutorials
- Git Workflows with Claude Code — take a reviewed change from branch to merged PR.
- Exploring Unfamiliar Codebases — how Claude reads code in plan mode before editing.
- Browse the full Claude Code tutorial series.
Safe Code Changes FAQ
What is plan mode in Claude Code?
Plan mode is a read-only planning state you enter with Shift+Tab. Claude investigates your code and proposes an approach without editing any files, so you can refine and approve the plan before a single line changes.
How do checkpoints work in Claude Code?
Before every file edit, Claude snapshots the current state. If a change goes wrong, you press Esc twice to rewind to before the last edit. Checkpoints are local and work independently of git, so no commit is required.
How do I undo a change Claude made?
Press Esc twice to roll back to the checkpoint before the last edit, or simply tell Claude "Undo the last change" and it reverts the edit for you.
Should I review diffs before committing?
Yes. Never commit what you have not read. Ask Claude to show what changed since the last commit and to flag anything risky, then commit only once you understand every change.
What is acceptEdits mode?
acceptEdits mode lets Claude execute an approved plan end to end without prompting you to confirm each individual file edit. Use it after you have reviewed and approved the plan in plan mode.
How do I keep Claude Code commits clean?
Keep commits small and logical, start every large task from a clean git status, and let Claude split unrelated work into separate atomic commits so your history stays reviewable.
Quick summary
- Plan first with
Shift+Tab, refine, approve, then execute in acceptEdits mode - Checkpoints let you rewind with
Esc Esc— local and independent of git - Always review the diff and let Claude flag risky changes before committing
- Keep commits small and logical; start every big task from a clean git state