Bird
Raised Fist0
Gitdevops~10 mins

HEAD pointer concept in Git - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

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
Process Flow - HEAD pointer concept
Start: Repository with commits
HEAD points to current branch
Branch points to latest commit
Checkout changes HEAD
HEAD moves to new branch or commit
Working directory reflects HEAD state
HEAD is a pointer that shows which commit or branch you are currently working on. When you switch branches or commits, HEAD moves to point there.
Execution Sample
Git
git checkout main
# HEAD points to 'main' branch

git checkout feature
# HEAD moves to 'feature' branch

git checkout abc1234
# HEAD points to commit abc1234 (detached)
This sequence shows HEAD moving from one branch to another and then to a specific commit (detached HEAD).
Process Table
StepCommandHEAD points toBranch/CommitWorking Directory State
1Initial statemainbranch 'main' at commit C3Files at commit C3
2git checkout featurefeaturebranch 'feature' at commit C5Files at commit C5
3git checkout abc1234abc1234commit abc1234 (detached)Files at commit abc1234
4git checkout mainmainbranch 'main' at commit C3Files at commit C3
💡 After step 4, HEAD points back to 'main' branch; working directory matches that commit.
Status Tracker
VariableStartAfter Step 2After Step 3After Step 4
HEADmainfeatureabc1234 (detached)main
Working DirectoryC3 filesC5 filesabc1234 filesC3 files
Key Moments - 3 Insights
Why does HEAD sometimes point directly to a commit instead of a branch?
When you checkout a specific commit (like in step 3), HEAD points directly to that commit, called a 'detached HEAD'. This means you are not on any branch.
What happens to the working directory when HEAD moves?
The working directory updates to match the commit HEAD points to, as shown in the 'Working Directory State' column in the execution table.
Does HEAD always point to a branch?
No, HEAD usually points to a branch, but can point directly to a commit in detached mode (step 3).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what does HEAD point to after step 3?
Abranch 'feature'
Bcommit abc1234 (detached)
Cbranch 'main'
Dno pointer
💡 Hint
Check the 'HEAD points to' column in row for step 3.
At which step does the working directory change to files from commit C5?
AStep 2
BStep 1
CStep 3
DStep 4
💡 Hint
Look at the 'Working Directory State' column for each step.
If you checkout a new branch from commit abc1234, what happens to HEAD?
AHEAD points to 'main'
BHEAD stays detached at abc1234
CHEAD points to the new branch
DHEAD is removed
💡 Hint
HEAD always points to the current branch unless detached; creating a new branch moves HEAD there.
Concept Snapshot
HEAD is a pointer to your current branch or commit.
When you switch branches, HEAD moves to that branch.
Checking out a commit directly detaches HEAD.
Working directory updates to match HEAD's commit.
Detached HEAD means no branch is checked out.
Full Transcript
The HEAD pointer in git shows where you currently are in your project history. It usually points to a branch, which itself points to a commit. When you use 'git checkout' to switch branches, HEAD moves to that branch. If you checkout a specific commit, HEAD points directly to that commit, called a detached HEAD. The files in your working directory always match the commit HEAD points to. This helps git know what you are working on and where new commits will be added.

Practice

(1/5)
1. What does the HEAD pointer in Git represent?
easy
A. The current commit your working directory is based on
B. The remote repository URL
C. The list of all branches
D. The stash of uncommitted changes

Solution

  1. Step 1: Understand the role of HEAD in Git

    HEAD points to the current commit that your working directory reflects.
  2. Step 2: Differentiate HEAD from other Git concepts

    HEAD is not related to remote URLs, branch lists, or stash; it tracks your current position in history.
  3. Final Answer:

    The current commit your working directory is based on -> Option A
  4. Quick Check:

    HEAD = current commit [OK]
Hint: HEAD always points to your current commit position [OK]
Common Mistakes:
  • Confusing HEAD with remote repository
  • Thinking HEAD lists branches
  • Assuming HEAD stores uncommitted changes
2. Which Git command correctly moves the HEAD pointer to the branch named feature?
easy
A. git merge feature
B. git checkout feature
C. git push feature
D. git commit feature

Solution

  1. Step 1: Identify the command to switch branches

    The git checkout command moves HEAD to the specified branch.
  2. Step 2: Confirm other commands do not move HEAD

    git commit creates commits, git push uploads changes, git merge combines branches but does not move HEAD directly.
  3. Final Answer:

    git checkout feature -> Option B
  4. Quick Check:

    Switch branch = git checkout [OK]
Hint: Use git checkout to move HEAD to another branch [OK]
Common Mistakes:
  • Using git commit to switch branches
  • Confusing git push with moving HEAD
  • Thinking git merge moves HEAD
3. Given the following commands run in order:
git checkout main
# HEAD points to main branch

git checkout -b new-feature
# Create and switch to new-feature branch

git commit -m "Add feature"
# Commit on new-feature branch
What does HEAD point to after these commands?
medium
A. No commit, HEAD is detached
B. The latest commit on the main branch
C. The initial commit of the repository
D. The latest commit on the new-feature branch

Solution

  1. Step 1: Track HEAD movement through commands

    Initially, HEAD points to main branch. Then git checkout -b new-feature creates and switches HEAD to new-feature branch.
  2. Step 2: Commit on new-feature updates HEAD

    The commit adds a new commit on new-feature branch, so HEAD points to this latest commit.
  3. Final Answer:

    The latest commit on the new-feature branch -> Option D
  4. Quick Check:

    HEAD follows current branch's latest commit [OK]
Hint: HEAD moves with branch switch and points to latest commit [OK]
Common Mistakes:
  • Assuming HEAD stays on main after branch creation
  • Thinking HEAD detaches after commit
  • Confusing initial commit with latest commit
4. You ran git checkout HEAD~1 but now your prompt shows (HEAD detached at ...). What is the problem?
medium
A. HEAD is detached because you checked out a commit, not a branch
B. HEAD is detached because you deleted the branch
C. HEAD is detached because the repository is corrupted
D. HEAD is detached because you pushed to remote

Solution

  1. Step 1: Understand what git checkout HEAD~1 does

    This command checks out the commit before the current HEAD, not a branch.
  2. Step 2: Explain detached HEAD state

    Checking out a commit directly detaches HEAD, meaning it points to a commit, not a branch.
  3. Final Answer:

    HEAD is detached because you checked out a commit, not a branch -> Option A
  4. Quick Check:

    Detached HEAD = checked out commit, not branch [OK]
Hint: Detached HEAD means checked out a commit, not a branch [OK]
Common Mistakes:
  • Thinking detached HEAD means repo corruption
  • Assuming branch was deleted
  • Confusing push with HEAD detachment
5. You want to move HEAD back two commits on the current branch but keep your working files unchanged. Which command should you use?
hard
A. git reset --hard HEAD~2
B. git checkout HEAD~2
C. git reset --soft HEAD~2
D. git revert HEAD~2

Solution

  1. Step 1: Understand reset options

    git reset --soft moves HEAD and branch pointer but keeps working directory unchanged.
  2. Step 2: Compare other options

    --hard resets files too, checkout detaches HEAD, revert creates a new commit undoing changes.
  3. Final Answer:

    git reset --soft HEAD~2 -> Option C
  4. Quick Check:

    Reset soft moves HEAD, keeps files [OK]
Hint: Use git reset --soft to move HEAD without changing files [OK]
Common Mistakes:
  • Using --hard and losing changes
  • Using checkout and detaching HEAD
  • Using revert which creates new commits