Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Using git restore to Discard Working Changes
📖 Scenario: You are working on a project using Git. You accidentally made some changes to a file but want to discard those changes and return the file to the last committed state.
🎯 Goal: Learn how to use the git restore command to discard changes in your working directory safely.
📋 What You'll Learn
Create a file with some content
Modify the file to simulate changes
Use git restore to discard the changes
Verify the file content is restored to the last commit
💡 Why This Matters
🌍 Real World
In real projects, sometimes you make changes you don't want to keep. Using <code>git restore</code> helps you quickly undo those changes without affecting your commits.
💼 Career
Knowing how to discard unwanted changes is essential for developers and DevOps engineers to maintain clean code and avoid mistakes in version control.
Progress0 / 4 steps
1
Create a file with initial content
Create a file called example.txt with the exact content Hello, Git! and add it to the Git repository with git add example.txt and commit with the message Initial commit.
Git
Hint
Use echo to create the file, then git add and git commit to save it.
2
Modify the file to simulate changes
Modify the file example.txt by adding the line This is a change. to simulate uncommitted changes.
Git
Hint
Use echo with >> to append the new line to the file.
3
Discard the changes using git restore
Use the command git restore example.txt to discard the uncommitted changes in example.txt and restore it to the last committed state.
Git
Hint
Use git restore followed by the filename to discard changes.
4
Verify the file content is restored
Use cat example.txt to display the content of example.txt and verify it only contains Hello, Git! without the discarded line.
Git
Hint
Use cat example.txt to see the file content.
Practice
(1/5)
1. What does the command git restore <filename> do in a Git repository?
easy
A. It permanently deletes the specified file from the repository history.
B. It discards changes in the specified file and restores it to the last committed state.
C. It stages the specified file for the next commit.
D. It creates a new branch with the name of the specified file.
Solution
Step 1: Understand the purpose of git restore
The git restore command is used to undo changes in the working directory before committing.
Step 2: Effect on the specified file
Using git restore <filename> resets the file to its last committed state, discarding any edits made since then.
Final Answer:
It discards changes in the specified file and restores it to the last committed state. -> Option B
Quick Check:
Undo changes = git restore [OK]
Hint: Use git restore to undo file edits before commit [OK]
Common Mistakes:
Confusing restore with delete or branch creation
Thinking it stages files instead of discarding changes
Assuming it affects commit history
2. Which of the following is the correct syntax to discard changes in a file named app.js using git restore?
easy
A. git restore app.js
B. git restore --discard app.js
C. git restore -d app.js
D. git restore --reset app.js
Solution
Step 1: Recall the basic syntax of git restore
The command to discard changes in a file is simply git restore <filename> without extra flags.
Step 2: Check the options given
Options B, C, and D use incorrect or non-existent flags. Only git restore app.js uses the correct syntax.
Final Answer:
git restore app.js -> Option A
Quick Check:
Correct syntax = git restore filename [OK]
Hint: Use git restore filename without extra flags to discard changes [OK]
Common Mistakes:
Adding unnecessary flags like --discard or --reset
Using shorthand flags that don't exist
Confusing git restore with git reset
3. Given the following sequence of commands in a Git repository:
First, 'Hello' is written to file.txt and staged. Then 'World' is appended but not staged.
Step 2: Effect of git restore on file.txt
The git restore file.txt discards the unstaged changes, reverting file.txt to the last staged (or committed) state which contains only 'Hello'.
Step 3: Output of cat file.txt
After restore, file.txt contains only 'Hello'. So, cat file.txt outputs 'Hello'.
Final Answer:
Hello -> Option A
Quick Check:
Restore discards unstaged changes = Hello [OK]
Hint: Restore resets file to last staged or committed state [OK]
Common Mistakes:
Assuming restore keeps appended changes
Confusing staged and unstaged changes
Expecting both lines to appear after restore
4. You ran git restore file.txt but your changes were not discarded. What is the most likely reason?
medium
A. Git restore only works on new files, not modified ones.
B. The file was already committed and has no changes to discard.
C. You used the wrong filename in the command.
D. You have staged the changes, so restore does not affect them by default.
Solution
Step 1: Understand git restore behavior with staged changes
By default, git restore <file> only discards unstaged changes. Staged changes remain unless you add the --staged flag.
Step 2: Analyze why changes were not discarded
If changes were staged, running restore without --staged won't discard them, so the file appears unchanged.
Final Answer:
You have staged the changes, so restore does not affect them by default. -> Option D
Quick Check:
Restore ignores staged changes unless --staged used [OK]
Hint: Use --staged to discard staged changes with git restore [OK]
Common Mistakes:
Assuming restore discards staged changes without flags
Thinking restore works only on new files
Not checking if filename is correct
5. You have modified three files: index.html, style.css, and script.js. You staged index.html and style.css but want to discard only the unstaged changes in style.css and script.js. Which command will achieve this?
hard
A. git restore --discard style.css script.js
B. git restore --staged style.css script.js
C. git restore style.css script.js
D. git restore --staged style.css && git restore script.js
Solution
Step 1: Identify which changes to discard
You want to discard unstaged changes in style.css and script.js. Staged changes should remain.
Step 2: Choose the correct git restore command
git restore --discard style.css script.js uses invalid --discard flag. Options B and C use --staged which would discard staged changes, which is not desired. git restore style.css script.js discards unstaged changes only.
Final Answer:
git restore style.css script.js -> Option C
Quick Check:
Restore without --staged discards unstaged changes [OK]
Hint: Restore files without --staged to discard only unstaged changes [OK]
Common Mistakes:
Using --staged and discarding staged changes accidentally