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
Searching History with git log -S
📖 Scenario: You are working on a project with a Git repository. You want to find all commits where a specific word or phrase was added or removed in the code. This helps you track when a feature or bug was introduced.
🎯 Goal: Learn how to use git log -S to search commit history for changes that add or remove a specific string.
📋 What You'll Learn
A Git repository with at least 3 commits
A file named app.txt tracked by Git
Use git log -S to search commit history
💡 Why This Matters
🌍 Real World
Developers often need to find when a bug or feature was introduced by searching commit history for specific code changes.
💼 Career
Knowing how to use <code>git log -S</code> is useful for debugging, code reviews, and understanding project history in software development roles.
Progress0 / 4 steps
1
Create a Git repository and add a file
Initialize a Git repository in the current folder by running git init. Then create a file named app.txt with the exact content Hello World. Add and commit this file with the message Initial commit.
Git
Hint
Use git init to start a repo. Use echo to create the file. Then add and commit.
2
Make a second commit changing the file
Change the content of app.txt to Hello Git. Then add and commit this change with the message Update greeting.
Git
Hint
Use echo again to overwrite the file. Then add and commit.
3
Make a third commit adding a new line
Append the line Goodbye to app.txt. Then add and commit this change with the message Add farewell.
Git
Hint
Use >> to append text to the file. Then add and commit.
4
Search commits that added or removed the word 'Goodbye'
Run the command git log -S Goodbye --oneline to find commits where the word Goodbye was added or removed. This will show the commit hash and message.
Git
Hint
The -S option searches for commits that add or remove the string. Use --oneline for a short summary.
Practice
(1/5)
1. What does the git log -S command do?
easy
A. Finds commits that added or removed a specific string in the code.
B. Shows the current status of files in the working directory.
C. Displays the list of branches in the repository.
D. Creates a new branch with the given name.
Solution
Step 1: Understand the purpose of git log -S
This command searches commit history for changes that added or removed a specific string.
Step 2: Compare with other git commands
Other options like git status show file status, git branch lists branches, and git branch <name> creates branches, which are different tasks.
Final Answer:
Finds commits that added or removed a specific string in the code. -> Option A
Quick Check:
Search commits by string change = B [OK]
Hint: Remember: -S searches for string changes in commits [OK]
Common Mistakes:
Confusing -S with showing file status
Thinking it lists branches
Assuming it creates branches
2. Which of the following is the correct syntax to find commits that added or removed the word fix using git log -S?
easy
A. git log -S fix
B. git log -s fix
C. git log --search=fix
D. git log -search fix
Solution
Step 1: Identify correct option flag
The correct flag to search for string changes is uppercase -S, so git log -S fix is correct.
Step 2: Check other options for syntax errors
-s is not valid for this purpose, and --search or -search are not valid git log options.
Final Answer:
git log -S fix -> Option A
Quick Check:
Uppercase -S for string search = A [OK]
Hint: Use uppercase -S to search string changes in git log [OK]
Common Mistakes:
Using lowercase -s instead of -S
Trying non-existent --search option
Adding extra dashes incorrectly
3. Given the following git log command: git log -S 'bugfix' --oneline What will this command output?
medium
A. An error because the string 'bugfix' is not quoted correctly.
B. A list of all commits with the word 'bugfix' anywhere in the commit message.
C. A list of commits that modified files named 'bugfix'.
D. A list of commits that added or removed the string 'bugfix', shown in one line each.
Solution
Step 1: Understand -S 'bugfix' usage
This searches commits that added or removed the exact string 'bugfix' in the code or content.
Step 2: Understand --oneline option
This shows each commit in a short single line format for easy reading.
Final Answer:
A list of commits that added or removed the string 'bugfix', shown in one line each. -> Option D
Quick Check:
-S finds string changes, --oneline shortens output = D [OK]
Hint: Combine -S with --oneline for short commit list by string [OK]
Common Mistakes:
Thinking it searches commit messages instead of code changes
Assuming it filters by file names
Believing quotes cause errors here
4. You run git log -S 'update' but get no results, even though you know the word 'update' was added in some commits. What could be the problem?
medium
A. You need to use git log -G 'update' to search commit messages.
B. You forgot to put quotes around the search string.
C. The string 'update' was only changed in commit messages, not in code.
D. The repository has no commits at all.
Solution
Step 1: Understand what -S searches
-S searches for string changes in the code or content, not in commit messages.
Step 2: Consider commit message search
If 'update' was only added or changed in commit messages, -S won't find it; use git log --grep 'update' to search commit messages. -G searches code diffs by regex.
Final Answer:
The string 'update' was only changed in commit messages, not in code. -> Option C
Quick Check:
-S searches code changes, not commit messages = A [OK]
Hint: Use -G to search commit messages, -S for code changes [OK]
Common Mistakes:
Assuming -S searches commit messages
Thinking quotes cause no results
Believing repository is empty without checking
5. You want to find all commits that added or removed the string TODO but only in the src/ folder. Which command will do this correctly?
hard
A. git log -S 'TODO' --path src/
B. git log -S 'TODO' -- src/
C. git log -S 'TODO' src/
D. git log --S 'TODO' -- src/
Solution
Step 1: Use -S 'TODO' to search string changes
This finds commits adding or removing 'TODO'.
Step 2: Use -- src/ to limit search to the src folder
The double dash -- separates options from path arguments, so -- src/ limits the search to that folder.
Step 3: Check other options for syntax correctness
src/ alone without -- is invalid here; --path is not a git log option; --S is invalid (uppercase S must be after git log).
Final Answer:
git log -S 'TODO' -- src/ -> Option B
Quick Check:
Use -- before path to limit git log search = C [OK]
Hint: Use -- before folder path to limit git log search [OK]