📖 Scenario: You accidentally ran a git reset --hard command and lost some recent commits. You want to recover those commits using Git's reflog feature.
🎯 Goal: Learn how to use git reflog to find lost commits and recover your work after a hard reset.
📋 What You'll Learn
Use git reflog to view recent HEAD changes
Identify the commit hash before the hard reset
Use git reset --hard <commit-hash> to restore the lost commits
Verify the recovery by checking the commit log
💡 Why This Matters
🌍 Real World
Developers often accidentally lose commits after a hard reset. Knowing how to recover them quickly saves time and prevents data loss.
💼 Career
Understanding Git recovery techniques is essential for software developers, DevOps engineers, and anyone working with version control to maintain code integrity.
Progress0 / 4 steps
1
View the Git reflog
Run the command git reflog to see the recent changes to HEAD including the hard reset.
Git
Hint
The git reflog command shows a list of recent HEAD positions, including commits before the reset.
2
Identify the commit hash before the hard reset
Look at the output of git reflog and copy the commit hash that was the HEAD before the hard reset. Assign this hash to a variable called commit_hash in your shell (e.g., commit_hash=abc1234).
Git
Hint
Find the commit hash from the reflog output just before the reset and assign it to commit_hash.
3
Reset hard to the previous commit
Use the command git reset --hard $commit_hash to restore the repository state to the commit before the hard reset.
Git
Hint
This command moves HEAD back to the commit before the reset, recovering lost commits.
4
Verify the recovery
Run git log --oneline -5 to check the latest 5 commits and confirm your lost commits are restored.
Git
Hint
The git log --oneline -5 command shows recent commits in short form to verify recovery.
Practice
(1/5)
1. What is the primary command to view the history of recent commits and actions in Git after a hard reset?
easy
A. git status
B. git log --oneline
C. git reflog
D. git reset --soft
Solution
Step 1: Understand the purpose of git reflog
git reflog shows a log of all recent commits and HEAD movements, including resets.
Step 2: Compare with other commands
git log --oneline shows commit history but not HEAD changes; git status shows current state; git reset --soft changes HEAD but does not show history.
Final Answer:
git reflog -> Option C
Quick Check:
View recent HEAD changes = git reflog [OK]
Hint: Use git reflog to see all recent HEAD changes [OK]
Common Mistakes:
Confusing git log with git reflog
Using git status to find past commits
Thinking git reset shows history
2. Which of the following is the correct syntax to reset your Git repository to a previous commit with a hard reset?
easy
A. git reset --hard <commit>
B. git reset -soft <commit>
C. git checkout --hard <commit>
D. git revert --hard <commit>
Solution
Step 1: Identify the correct reset syntax
The correct command to reset to a previous commit and discard changes is git reset --hard <commit>.
Step 2: Eliminate incorrect options
-soft is invalid flag, git checkout --hard is not a valid command, and git revert does not accept --hard.
Final Answer:
git reset --hard <commit> -> Option A
Quick Check:
Hard reset syntax = git reset --hard [OK]
Hint: Use git reset --hard commit_hash to restore state [OK]
Common Mistakes:
Using -soft instead of --hard
Confusing git revert with reset
Trying git checkout with --hard
3. After running git reset --hard HEAD~2, which command will help you find the commit hash to recover your lost changes?
medium
A. git status
B. git branch
C. git diff
D. git reflog
Solution
Step 1: Understand what git reset --hard HEAD~2 does
This command moves HEAD back two commits and discards changes, potentially losing recent commits from view.
Step 2: Identify command to find lost commit hashes
git reflog shows all recent HEAD positions including those before the reset, allowing recovery.
Final Answer:
git reflog -> Option D
Quick Check:
Find lost commits after reset = git reflog [OK]
Hint: Use git reflog to find lost commit hashes after reset [OK]
Common Mistakes:
Using git status which shows current state only
Using git branch which lists branches, not commits
Using git diff which shows changes, not history
4. You accidentally ran git reset --hard HEAD~1 and lost your latest commit. Which sequence of commands will help you recover it?
medium
A. git reflog to find commit hash, then git reset --hard <hash>
B. git log to find commit, then git revert HEAD
C. git checkout HEAD~1 then git commit --amend
D. git reset --soft HEAD~1 then git commit
Solution
Step 1: Use git reflog to find lost commit hash
git reflog lists all recent HEAD positions including the lost commit before reset.
Step 2: Reset hard to the lost commit hash
Use git reset --hard <hash> to restore the repository to that commit state.
Final Answer:
git reflog then git reset --hard <hash> -> Option A
Quick Check:
Recover lost commit = reflog + reset --hard [OK]
Hint: Find commit with reflog, restore with reset --hard [OK]
Common Mistakes:
Using git log which may not show lost commits
Trying git revert which creates new commits
Using reset --soft after hard reset without commit hash
5. You performed a hard reset to a commit two steps behind but realize you need to recover the lost commits and keep your current changes. What is the best approach?
hard
A. Run git reset --hard HEAD@{1} to go back to previous HEAD state
B. Use git reflog to find lost commits, then git cherry-pick them onto current branch
C. Use git revert on the reset commit to undo the reset
D. Create a new branch from HEAD~2 and merge it back
Solution
Step 1: Find lost commits using git reflog
git reflog shows the commit hashes that were lost after the hard reset.
Step 2: Use git cherry-pick to apply lost commits onto current branch
This preserves current changes and reapplies lost commits without resetting the branch.
Final Answer:
Use git reflog and cherry-pick lost commits -> Option B
Quick Check:
Recover lost commits without losing current changes = reflog + cherry-pick [OK]
Hint: Cherry-pick lost commits found via reflog to keep current work [OK]
Common Mistakes:
Using reset --hard to go back loses current changes
Using revert on reset commit does not restore lost commits
Merging from old branch may cause conflicts or duplicate commits
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.