📖 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
Step 1: Understand what a branch represents
A branch in Git is a pointer to a commit, not the files themselves.
Step 2: Identify what is stored in the branch file
The branch file stores the commit hash it points to, which identifies the commit.
Final Answer:
A commit hash pointing to a specific commit -> Option A
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
Step 1: Locate branch files in Git directory
Branch files are stored in .git/refs/heads/ folder.
Step 2: Use a command to read the branch file content
The cat command reads the file content, showing the commit hash.
Final Answer:
cat .git/refs/heads/main -> Option B
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
Step 1: Understand what git checkout does with a branch
It moves the HEAD pointer to the commit the branch points to.
Step 2: Connect branch file content to checkout effect
The branch file has commit hash abc1234, so checkout moves HEAD there and updates files.
Final Answer:
Moves HEAD to commit abc1234 and updates working files -> Option C
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
Step 1: Understand branch file role in Git
The branch file must contain a commit hash to point to a commit.
Step 2: Analyze effect of empty branch file
If empty, Git cannot find the commit, so checkout or other commands fail with errors.
Final Answer:
Git cannot find the commit for branch dev, causing errors on checkout -> Option D
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
Step 1: Understand how branches point to commits
Branches are files storing commit hashes. Copying main's hash creates release at same commit.
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.
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.
Final Answer:
git checkout -b release main -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.