Bird
Raised Fist0
Gitdevops~15 mins

How branches are just files with hashes in Git - Try It Yourself

Choose your learning style10 modes available
Understanding Git Branches as Files with Hashes
📖 Scenario: You are learning how Git stores branches internally. Each branch is just a file that contains a commit hash. This helps Git know which commit the branch points to.Imagine a folder where each file is a branch name, and inside each file is a code that tells Git the latest commit on that branch.
🎯 Goal: Build a simple simulation of Git branches as files containing commit hashes. You will create a dictionary to represent branches, add a new branch, update a branch's commit hash, and finally display the branch information.
📋 What You'll Learn
Create a dictionary named branches with exact branch names and commit hashes
Add a new branch with a specific commit hash
Update an existing branch's commit hash
Print the final branches dictionary
💡 Why This Matters
🌍 Real World
Understanding how Git stores branches helps you grasp how version control works under the hood, making you more confident in using Git commands.
💼 Career
Many DevOps and software development roles require strong Git skills. Knowing the internal structure of branches helps in troubleshooting and advanced Git usage.
Progress0 / 4 steps
1
Create initial branches dictionary
Create a dictionary called branches with these exact entries: 'main': 'a1b2c3d', 'dev': 'd4e5f6g', and 'feature': 'h7i8j9k'.
Git
Hint

Use curly braces {} to create a dictionary with keys as branch names and values as commit hashes.

2
Add a new branch
Add a new branch called 'hotfix' with the commit hash 'z9y8x7w' to the branches dictionary.
Git
Hint

Use square brackets [] to add a new key-value pair to the dictionary.

3
Update an existing branch's commit hash
Update the commit hash of the 'dev' branch in the branches dictionary to 'm1n2o3p'.
Git
Hint

Assign a new value to the existing key 'dev' in the dictionary.

4
Display the branches dictionary
Write a print statement to display the branches dictionary.
Git
Hint

Use print(branches) to show the dictionary content.

Practice

(1/5)
1. What does a Git branch file store internally?
easy
A. A commit hash pointing to a specific commit
B. The entire project files
C. The list of all branches
D. The commit message text

Solution

  1. Step 1: Understand what a branch represents

    A branch in Git is a pointer to a commit, not the files themselves.
  2. Step 2: Identify what is stored in the branch file

    The branch file stores the commit hash it points to, which identifies the commit.
  3. Final Answer:

    A commit hash pointing to a specific commit -> Option A
  4. Quick Check:

    Branch file = commit hash [OK]
Hint: Branches store commit hashes, not files or messages [OK]
Common Mistakes:
  • Thinking branches store full project files
  • Confusing branch files with commit messages
  • Assuming branches list all other branches
2. Which command shows the content of the branch file for main in Git?
easy
A. git show main
B. cat .git/refs/heads/main
C. git branch main
D. git log main

Solution

  1. Step 1: Locate branch files in Git directory

    Branch files are stored in .git/refs/heads/ folder.
  2. Step 2: Use a command to read the branch file content

    The cat command reads the file content, showing the commit hash.
  3. Final Answer:

    cat .git/refs/heads/main -> Option B
  4. Quick Check:

    Read branch file with cat [OK]
Hint: Branch files are plain files under .git/refs/heads/ [OK]
Common Mistakes:
  • Using git show which shows commit details, not raw hash
  • Using git branch which lists branches, not file content
  • Using git log which shows commit history, not branch file
3. Given the branch file .git/refs/heads/feature contains abc1234, what does git checkout feature do?
medium
A. Creates a new commit with hash abc1234
B. Deletes the feature branch
C. Moves HEAD to commit abc1234 and updates working files
D. Shows the commit message of abc1234

Solution

  1. Step 1: Understand what git checkout does with a branch

    It moves the HEAD pointer to the commit the branch points to.
  2. Step 2: Connect branch file content to checkout effect

    The branch file has commit hash abc1234, so checkout moves HEAD there and updates files.
  3. Final Answer:

    Moves HEAD to commit abc1234 and updates working files -> Option C
  4. Quick Check:

    Checkout moves HEAD to branch commit [OK]
Hint: Checkout moves HEAD to branch's commit hash [OK]
Common Mistakes:
  • Thinking checkout deletes branches
  • Confusing checkout with commit creation
  • Assuming checkout only shows commit messages
4. You see that .git/refs/heads/dev file is empty. What problem will this cause?
medium
A. Git will ignore the dev branch and use main instead
B. Git will create a new commit automatically
C. Git will treat dev as a remote branch
D. Git cannot find the commit for branch dev, causing errors on checkout

Solution

  1. Step 1: Understand branch file role in Git

    The branch file must contain a commit hash to point to a commit.
  2. Step 2: Analyze effect of empty branch file

    If empty, Git cannot find the commit, so checkout or other commands fail with errors.
  3. Final Answer:

    Git cannot find the commit for branch dev, causing errors on checkout -> Option D
  4. Quick Check:

    Empty branch file breaks commit reference [OK]
Hint: Branch files must have commit hashes, never be empty [OK]
Common Mistakes:
  • Assuming Git auto-fixes empty branch files
  • Confusing empty branch file with remote branch
  • Thinking Git defaults to main silently
5. You want to create a new branch release pointing to the same commit as main. Which command correctly updates the branch file?
hard
A. git checkout -b release main
B. git branch release main
C. A and B
D. echo $(cat .git/refs/heads/main) > .git/refs/heads/release

Solution

  1. Step 1: Understand how branches point to commits

    Branches are files storing commit hashes. Copying main's hash creates release at same commit.
  2. Step 2: Analyze each option's effect

    echo $(cat .git/refs/heads/main) > .git/refs/heads/release manually copies the hash file content. git branch release main creates branch release at main's commit. git checkout -b release main creates and switches to release at main's commit.
  3. Step 3: Confirm which options update branch file correctly

    Options A, B, and D all create the release branch pointing to main's commit, but only D is a single command that creates and switches to the branch.
  4. Final Answer:

    git checkout -b release main -> Option A
  5. Quick Check:

    git checkout -b creates and switches branch [OK]
Hint: Multiple ways to set branch file to same commit hash, but checkout -b is most common [OK]
Common Mistakes:
  • Thinking only git commands can create branches
  • Ignoring manual file editing possibility
  • Confusing checkout with branch creation only
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