Bird
Raised Fist0
Gitdevops~10 mins

Searching history with git log -S - 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 - Searching history with git log -S
Start: User runs git log -S"text"
Git scans commits
Check each commit diff for added/removed 'text'
If found, include commit in output
Display matching commits
End
The git log -S command scans commit history to find commits that added or removed a specific text string, then shows those commits.
Execution Sample
Git
git log -S"fix bug" --oneline
# Shows commits where 'fix bug' was added or removed
This command searches commit history for changes adding or removing the phrase 'fix bug' and lists those commits briefly.
Process Table
StepActionCommit CheckedText Found in Diff?Include in Output
1Check commit abc123abc123NoNo
2Check commit def456def456Yes (added 'fix bug')Yes
3Check commit 789abc789abcNoNo
4Check commit 456def456defYes (removed 'fix bug')Yes
5Check commit 123789123789NoNo
6End of commits---
💡 All commits checked; output includes only commits where 'fix bug' was added or removed.
Status Tracker
VariableStartAfter 1After 2After 3After 4After 5Final
Current Commit-abc123def456789abc456def123789-
Text FoundFalseFalseTrueFalseTrueFalse-
Output List[][][def456][def456][def456, 456def][def456, 456def][def456, 456def]
Key Moments - 2 Insights
Why does git log -S only show commits where the text was added or removed, not just present?
Because git log -S searches for changes that add or remove the exact text, not just commits containing the text. See execution_table rows 2 and 4 where text was added or removed, so those commits are included.
What happens if the text appears in a commit but was not changed in that commit?
That commit is not included because git log -S looks for changes adding or removing the text, not just presence. See execution_table rows 1 and 3 where text was not found in the diff, so commits are excluded.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, which commit was the first to include the searched text change?
Adef456
B789abc
Cabc123
D456def
💡 Hint
Check the 'Text Found in Diff?' column in the execution_table for the first 'Yes'.
At which step does the output list first include a commit?
AAfter step 1
BAfter step 2
CAfter step 3
DAfter step 4
💡 Hint
Look at the 'Output List' variable in variable_tracker after each step.
If the text was only removed but never added, which commits would git log -S show?
AOnly commits where text was added
BAll commits containing the text
COnly commits where text was removed
DNo commits
💡 Hint
git log -S shows commits where text was added or removed, see execution_table rows 2 and 4.
Concept Snapshot
git log -S"text"
Searches commit history for commits that add or remove 'text'.
Only commits with changes adding/removing the exact string appear.
Useful to find when a specific code or text change happened.
Combine with options like --oneline for brief output.
Full Transcript
The git log -S command helps find commits where a specific text was added or removed. It scans each commit's changes (diffs) and includes only those commits where the searched text appears as a change, not just present. For example, running git log -S"fix bug" lists commits that added or removed the phrase 'fix bug'. The execution table shows step-by-step how git checks each commit and decides whether to include it based on the presence of the text in the diff. Variables track the current commit, whether the text was found, and the growing list of output commits. Key points are that git log -S focuses on changes, not just presence, and that commits without changes to the text are excluded. This helps developers quickly find when a bug fix or feature was introduced or removed in the code history.

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

  1. Step 1: Understand the purpose of git log -S

    This command searches commit history for changes that added or removed a specific string.
  2. 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.
  3. Final Answer:

    Finds commits that added or removed a specific string in the code. -> Option A
  4. 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

  1. Step 1: Identify correct option flag

    The correct flag to search for string changes is uppercase -S, so git log -S fix is correct.
  2. 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.
  3. Final Answer:

    git log -S fix -> Option A
  4. 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

  1. Step 1: Understand -S 'bugfix' usage

    This searches commits that added or removed the exact string 'bugfix' in the code or content.
  2. Step 2: Understand --oneline option

    This shows each commit in a short single line format for easy reading.
  3. Final Answer:

    A list of commits that added or removed the string 'bugfix', shown in one line each. -> Option D
  4. 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

  1. Step 1: Understand what -S searches

    -S searches for string changes in the code or content, not in commit messages.
  2. 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.
  3. Final Answer:

    The string 'update' was only changed in commit messages, not in code. -> Option C
  4. 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

  1. Step 1: Use -S 'TODO' to search string changes

    This finds commits adding or removing 'TODO'.
  2. 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.
  3. 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).
  4. Final Answer:

    git log -S 'TODO' -- src/ -> Option B
  5. Quick Check:

    Use -- before path to limit git log search = C [OK]
Hint: Use -- before folder path to limit git log search [OK]
Common Mistakes:
  • Omitting -- before path
  • Using invalid --path option
  • Writing --S instead of -S