Bird
Raised Fist0
Gitdevops~10 mins

Reflog for finding lost commits in Git - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Reflog for finding lost commits
Commit made
↓
HEAD moves to new commit
↓
Commit lost by reset/rebase
↓
Use git reflog
↓
Find lost commit SHA
↓
Recover commit with git checkout or git reset
This flow shows how commits move HEAD, how commits can be lost by reset or rebase, and how reflog helps find and recover them.
Execution Sample
Git
git commit -m "Add feature"
git reset --hard HEAD~1
git reflog
# find lost commit SHA
git checkout <SHA>
This sequence creates a commit, resets HEAD to previous commit losing the new one, then uses reflog to find and recover the lost commit.
Process Table
StepCommandHEAD PositionActionResult
1git commit -m "Add feature"commit1Create new commitHEAD points to commit1
2git reset --hard HEAD~1commit0Move HEAD back one commitcommit1 becomes unreachable (lost)
3git reflogcommit0Show HEAD historyLists commit1 as recent HEAD position
4git checkout <commit1 SHA>commit1Checkout lost commitHEAD points to recovered commit1
💡 Lost commit found in reflog and recovered by checkout
Status Tracker
VariableStartAfter Step 1After Step 2After Step 4
HEADcommit0commit1commit0commit1
commit1does not existexists and pointed by HEADunreachable (lost)checked out and reachable
Key Moments - 3 Insights
Why does the lost commit still appear in reflog after reset?
Because reflog records all HEAD movements including resets, so even unreachable commits are listed (see execution_table step 3).
Can I recover a lost commit if it is not in reflog?
No, reflog only tracks recent HEAD changes. If the commit is too old and reflog expired, recovery is not possible.
What does git reset --hard do to the commit?
It moves HEAD and updates working files, making the newer commit unreachable but still in reflog temporarily (see step 2).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is HEAD pointing to after step 2?
Acommit0
Bcommit1
Ccommit2
DNo commit
💡 Hint
Check the 'HEAD Position' column for step 2 in the execution_table.
At which step does the lost commit become reachable again?
AStep 1
BStep 4
CStep 2
DStep 3
💡 Hint
Look for when HEAD points back to commit1 in the execution_table.
If you did not run git reflog, how would the recovery process change?
AThe commit would be deleted immediately
BYou could still recover the commit easily
CYou would not know the lost commit SHA to recover
DHEAD would automatically point to the lost commit
💡 Hint
Refer to the importance of reflog in finding lost commit SHA in the concept_flow.
Concept Snapshot
git reflog records all HEAD movements including resets.
Lost commits become unreachable but are listed in reflog.
Use 'git reflog' to find lost commit SHA.
Recover lost commits with 'git checkout <SHA>' or 'git reset <SHA>'.
Reflog entries expire after some time, so recover quickly.
Full Transcript
This lesson shows how git commits move HEAD pointer and how commands like reset can make commits unreachable or lost. The git reflog command records all HEAD movements, including resets and rebases, so it helps find lost commits by showing their SHA hashes. By running git reflog, you can see the history of HEAD positions and find the SHA of a lost commit. Then you can recover it by checking it out or resetting HEAD to it. The execution table traces these steps: making a commit, resetting HEAD back, listing reflog, and recovering the commit. Variables like HEAD and commit1 change state accordingly. Key moments clarify why reflog still shows lost commits and the limits of recovery. The quiz tests understanding of HEAD positions and recovery steps. Remember, reflog is a safety net for recent lost commits but entries expire over time.

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

  1. 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.
  2. 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.
  3. Final Answer:

    To record where HEAD and branches have pointed recently -> Option C
  4. 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

  1. Step 1: Recall the basic reflog command

    The simplest and correct command to show reflog entries is git reflog.
  2. Step 2: Evaluate other options

    git reflog --show is invalid; git reflog list and git reflog -a are invalid commands.
  3. Final Answer:

    git reflog -> Option A
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    git reflog -> Option A
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    git reset --hard HEAD@{1} -> Option D
  4. 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

  1. Step 1: Locate lost commits in reflog

    Deleted branch commits remain in reflog as recent HEAD positions or branch references before deletion.
  2. 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.
  3. Final Answer:

    Find the commit hash in git reflog and create a new branch at that hash -> Option B
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard