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
git blame for line-by-line history
📖 Scenario: You are working on a small project with a file called app.py. You want to find out who last changed each line in this file to understand the history better.
🎯 Goal: Learn how to use git blame to see line-by-line history of changes in a file.
📋 What You'll Learn
Have a git repository initialized
Have a file named app.py with at least 3 lines of code
Use git blame to see who last changed each line
💡 Why This Matters
🌍 Real World
Developers often need to find out who last changed a specific line of code to understand why a change was made or to ask questions.
💼 Career
Knowing how to use <code>git blame</code> is essential for debugging, code reviews, and collaborating in software development teams.
Progress0 / 4 steps
1
Create a file app.py with 3 lines of code
Create a file called app.py with these exact lines: print('Hello World') print('Welcome to git blame') print('This is line 3')
Git
Hint
Use a text editor or command line to create app.py with the exact lines.
2
Add and commit the file to git
Add the file app.py to git staging area using git add app.py and commit it with the message Initial commit with app.py using git commit -m "Initial commit with app.py"
Git
Hint
Use git add to stage and git commit -m to commit with the exact message.
3
Modify the second line in app.py
Change the second line in app.py to print('Welcome to the git blame tutorial') exactly, then add and commit the change with message Update welcome message
Git
Hint
Edit the file to change the second line exactly, then stage and commit with the exact message.
4
Use git blame to see line-by-line history of app.py
Run the command git blame app.py to display who last changed each line in app.py.
Git
Hint
Simply run git blame app.py to see the line-by-line history.
Practice
(1/5)
1. What does the git blame command primarily show?
easy
A. Who last changed each line in a file
B. The current status of the repository
C. The list of branches in the repository
D. The commit history summary
Solution
Step 1: Understand the purpose of git blame
git blame is used to show the author information for each line in a file, indicating who last modified that line.
Step 2: Compare with other git commands
Other commands like git status, git branch, and git log serve different purposes, not line-by-line author tracking.
Final Answer:
Who last changed each line in a file -> Option A
Quick Check:
git blame = line author info [OK]
Hint: Remember: blame = who changed each line last [OK]
Common Mistakes:
Confusing git blame with git log
Thinking git blame shows branch info
Assuming git blame shows file status
2. Which of the following is the correct syntax to show blame for a file named app.js?
easy
A. git blame --file app.js
B. git blame app.js
C. git blame --show app.js
D. git blame -f app.js
Solution
Step 1: Recall basic git blame syntax
The basic syntax to run blame on a file is simply git blame <filename>. No extra flags are needed for a simple blame.
Step 2: Check the options given
Options like -f, --show, or --file are not valid or required for basic blame usage.
Final Answer:
git blame app.js -> Option B
Quick Check:
Basic blame = git blame filename [OK]
Hint: Use just 'git blame filename' for simple blame [OK]
Common Mistakes:
Adding unnecessary flags
Using incorrect or unsupported options
Confusing blame syntax with other git commands
3. Given the command git blame -L 10,15 README.md, what will it show?
medium
A. Blame info for lines 1 to 15 of README.md
B. Blame info for the whole README.md file
C. Blame info for lines 10 to 15 of README.md
D. An error because -L requires a commit hash
Solution
Step 1: Understand the -L option in git blame
The -L option limits the blame output to a specific line range. Here, -L 10,15 means lines 10 through 15.
Step 2: Apply to the file README.md
The command will show blame info only for lines 10 to 15 of the file README.md, not the entire file or any other range.
Final Answer:
Blame info for lines 10 to 15 of README.md -> Option C
Quick Check:
-L limits lines = lines 10-15 [OK]
Hint: -L start,end shows blame only for those lines [OK]
Common Mistakes:
Assuming -L shows whole file blame
Thinking -L needs a commit hash
Confusing line numbers with byte offsets
4. You run git blame --since=2.weeks README.md but get an error. What is the likely cause?
medium
A. You need to specify a commit hash with --since
B. README.md file does not exist
C. Incorrect date format for --since option
D. git blame does not support --since option
Solution
Step 1: Check if git blame supports --since
The git blame command does not have a --since option. This option is valid for git log but not for blame.
Step 2: Understand the error cause
Using an unsupported option causes git blame to error out. The file existence or commit hash is unrelated here.
Final Answer:
git blame does not support --since option -> Option D
Quick Check:
git blame lacks --since option [OK]
Hint: git blame has no --since; use git log for date filters [OK]
Common Mistakes:
Assuming git blame supports --since
Blaming file existence without checking
Thinking commit hash is mandatory with --since
5. You want to find who last changed line 42 in server.py but only for commits on the feature branch. Which command correctly achieves this?
hard
A. git blame feature -- server.py -L 42,42
B. git blame -L 42,42 server.py feature
C. git blame -L 42,42 -- server.py feature
D. git blame -L 42,42 --first-parent feature -- server.py
Solution
Step 1: Understand branch limitation in git blame
To blame a file as it appears on a specific branch, specify the branch name before the -- separator, then the file name.
Step 2: Apply line range and branch correctly
The correct syntax is git blame <branch> -- <file> -L <start,end>. So git blame feature -- server.py -L 42,42 limits blame to line 42 on the feature branch.
Final Answer:
git blame feature -- server.py -L 42,42 -> Option A
Quick Check:
Branch before --, file after, -L for lines [OK]
Hint: Put branch before --, file after, use -L for lines [OK]
Common Mistakes:
Placing branch after file name
Misordering -L option
Using unsupported options like --first-parent with blame