← Back to Git Course | Chapter 5: Undoing Changes | Lesson 5 of 6

Git restore & checkout

restore and checkout are two ways of pressing undo on a file, bringing it back to how it looked when you last saved it.
Syntax
bash
git restore file_name
git restore --staged file_name
git checkout branch_name

Discarding Unstaged Local Changes

git restore <file> throws away uncommitted local edits to a file and resets it to match the last commit (or a specified commit with --source). It's the modern, safer-named replacement for the old git checkout -- <file> syntax that used to double as both a file-restore and branch-switch command.

Example: Discarding Unstaged Local Changes

bash
git restore file.txt

Unstaging Staged Files

If you staged a file with git add but decide you don't want to commit it yet, git restore --staged <file> unstages it — moving it back to "modified but not staged" — without touching your actual edits in the working directory. This is the fix for the common "oops, I staged the wrong file" moment.

Example: Unstaging Staged Files

bash
git restore --staged file.txt

Switching Between Branches

git checkout <branch> (or the newer git switch <branch>) updates your working directory to match that branch's latest commit. Git will refuse the switch if it would silently overwrite uncommitted changes, so committing or stashing first avoids a confusing error mid-switch.

Example: Switching Between Branches

bash
git checkout main
git switch main

Creating and Switching to New Branches

git checkout -b <name> (or git switch -c <name>) creates a new branch from your current position and switches to it in one step, instead of running git branch <name> followed by a separate switch command — the shortcut most people reach for in daily use.

Example: Creating and Switching to New Branches

bash
git checkout -b feature-x
git switch -c feature-x

Restoring Files from Specific Commits

git restore --source=<commit> <file> (or the older git checkout <commit> -- <file>) pulls just one file's contents from an arbitrary past commit into your working directory, without touching any other files or moving your branch pointer — useful for recovering a single deleted or overwritten file.

Example: Restoring Files from Specific Commits

bash
git restore --source=a1b2c3d file.txt
git checkout a1b2c3d -- file.txt
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
Common Mistakes
  1. Using git checkout file.txt in old tutorials, when git restore file.txt is clearer and does one job.
  2. Using git restore file.txt after staging, expecting to unstage, when git restore --staged file.txt is needed.
  3. Expecting git restore to recover discarded uncommitted edits, when there is no undo for them.
🔒

Chapter Quiz — Complete all 6 topics to unlock

0/6 topics done

Complete these topics first:

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.