📖 Scenario: You are working on a project using Git. Sometimes, you might accidentally lose track of commits after resetting or switching branches. Git keeps a hidden log called reflog that records all changes to the HEAD pointer. This helps you find lost commits and recover them.
🎯 Goal: Learn how to use git reflog to find lost commits and restore them by creating a new branch pointing to the lost commit.
📋 What You'll Learn
Use git reflog to view recent HEAD changes
Identify the commit hash of a lost commit from reflog output
Create a new branch pointing to the lost commit hash
Verify the lost commit is restored by checking the branch log
💡 Why This Matters
🌍 Real World
Developers often accidentally lose commits when resetting branches or switching contexts. Reflog helps find and restore these commits, preventing data loss.
💼 Career
Knowing how to use reflog is essential for developers and DevOps engineers to recover lost work and maintain code integrity in real projects.
Progress0 / 4 steps
1
View the reflog to see recent HEAD changes
Run the command git reflog to display the recent changes to the HEAD pointer, including lost commits.
Git
Hint
Type git reflog exactly to see the history of HEAD movements.
2
Identify the commit hash of the lost commit
Look at the output of git reflog and copy the commit hash (a string of letters and numbers) of the lost commit you want to recover. Assign this hash as a string to a variable called lost_commit in your shell or script.
Git
Hint
Copy the commit hash from reflog output and assign it like lost_commit="commit_hash_here".
3
Create a new branch pointing to the lost commit
Use the command git branch recovered_branch $lost_commit to create a new branch called recovered_branch that points to the lost commit hash stored in lost_commit.
Git
Hint
Use git branch recovered_branch $lost_commit to restore the lost commit as a branch.
4
Verify the recovered branch points to the lost commit
Run git log recovered_branch -1 --oneline to display the latest commit on recovered_branch and confirm it matches the lost commit hash.
Git
Hint
The output should show the lost commit hash and its message.
Practice
(1/5)
1. What is the primary purpose of git reflog?
easy
A. To list all remote branches
B. To permanently delete commits from the repository
C. To record where HEAD and branches have pointed recently
D. To merge two branches automatically
Solution
Step 1: Understand what reflog tracks
Reflog records the history of where HEAD and branch references have pointed, including commits that might be lost after resets or rebases.
Step 2: Compare options with reflog purpose
Only To record where HEAD and branches have pointed recently correctly describes reflog's role. Options B, C, and D describe unrelated git functions.
Final Answer:
To record where HEAD and branches have pointed recently -> Option C
Quick Check:
Reflog tracks HEAD history = A [OK]
Hint: Reflog shows recent HEAD moves, like a safety net [OK]
Common Mistakes:
Confusing reflog with git log
Thinking reflog deletes commits
Assuming reflog lists remote branches
2. Which command correctly shows the reflog entries?
easy
A. git reflog
B. git reflog list
C. git reflog -a
D. git reflog --show
Solution
Step 1: Recall the basic reflog command
The simplest and correct command to show reflog entries is git reflog.
Step 2: Evaluate other options
git reflog --show is invalid; git reflog list and git reflog -a are invalid commands.
Final Answer:
git reflog -> Option A
Quick Check:
Basic reflog command = git reflog [OK]
Hint: Use just 'git reflog' to see recent HEAD moves [OK]
Common Mistakes:
Adding unnecessary subcommands like 'list'
Using invalid flags like '-a'
Confusing reflog with git log
3. After running git reset --hard HEAD~1, you realize you lost a commit. Which command helps you find the lost commit's hash?
medium
A. git reflog
B. git status
C. git branch
D. git log --oneline
Solution
Step 1: Understand what happens after reset
git reset --hard HEAD~1 moves HEAD back one commit, making the latest commit unreachable but still in reflog.
Step 2: Identify command to find lost commit
git reflog shows recent HEAD positions including the lost commit's hash. Other commands won't show unreachable commits.
Final Answer:
git reflog -> Option A
Quick Check:
Reflog shows lost commits after reset = C [OK]
Hint: Use reflog to find commits lost by reset [OK]
Common Mistakes:
Using git status which shows working tree only
Using git branch which lists branches, not commits
Using git log which hides unreachable commits
4. You ran git reset --hard HEAD~2 but want to restore the latest commit. Which command correctly resets to the lost commit using reflog?
medium
A. git reset --hard HEAD@{2}
B. git reset --hard origin/main
C. git reset --hard HEAD~1
D. git reset --hard HEAD@{1}
Solution
Step 1: Understand reflog indexing
After resetting HEAD back two commits, reflog entries show HEAD@{0} as current, HEAD@{1} as previous position (the lost commit), and HEAD@{2} as older.
Step 2: Choose correct reflog entry to restore
To restore the latest lost commit, reset to HEAD@{1} which points to it. HEAD@{2} is older, HEAD~1 is relative to current HEAD, and origin/main may differ.
Final Answer:
git reset --hard HEAD@{1} -> Option D
Quick Check:
Use HEAD@{1} to restore last HEAD position [OK]
Hint: Reset to HEAD@{1} to undo last reset [OK]
Common Mistakes:
Using HEAD@{2} which is older than needed
Using HEAD~1 which is relative to current HEAD
Resetting to origin/main which may differ
5. You accidentally deleted a branch with important commits. How can you recover the lost commits using reflog?
hard
A. Run git branch -d to restore the branch
B. Find the commit hash in git reflog and create a new branch at that hash
C. Use git reset --hard origin/branch-name to recover commits
D. Re-clone the repository to get the branch back
Solution
Step 1: Locate lost commits in reflog
Deleted branch commits remain in reflog as recent HEAD positions or branch references before deletion.
Step 2: Create a new branch at the lost commit hash
After finding the commit hash in reflog, use git branch new-branch-name <commit-hash> to restore the branch with lost commits.
Final Answer:
Find the commit hash in git reflog and create a new branch at that hash -> Option B
Quick Check:
Reflog + new branch recovers deleted commits [OK]
Hint: Use reflog hash to recreate deleted branch [OK]
Common Mistakes:
Trying to delete branch again to restore it
Resetting to origin which may not have deleted commits
Re-cloning loses local lost commits
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.