Bird
Raised Fist0
Gitdevops~20 mins

Searching history with git log -S - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
Git Log Search Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
What does the command git log -S'fixBug' do?

Consider the command git log -S'fixBug'. What is the output or effect of running this command in a git repository?

Git
git log -S'fixBug'
ADisplays commits that modified files named 'fixBug'.
BShows commits that added or removed the string 'fixBug' anywhere in the code.
CLists commits that contain the word 'fixBug' in their commit message only.
DSearches for commits that changed the author name to 'fixBug'.
Attempts:
2 left
💡 Hint

Think about what the -S option searches for in the commit history.

Best Practice
intermediate
2:00remaining
Which command helps find commits that introduced or removed a function named calculateSum?

You want to find commits where the function calculateSum was added or removed in your code. Which git command is best suited for this?

Agit log -S'calculateSum'
Bgit log --grep='calculateSum'
Cgit log --author='calculateSum'
Dgit log --name-only | grep 'calculateSum'
Attempts:
2 left
💡 Hint

Remember, -S searches code changes, while --grep searches commit messages.

Troubleshoot
advanced
2:00remaining
Why does git log -S'init' show no commits even though the string exists in the code?

You run git log -S'init' but it returns no commits, even though the string 'init' is present in your current code files. What is the most likely reason?

AThe string 'init' was never added or removed in any commit; it was always present.
BThe repository is corrupted and cannot search history.
CThe command requires <code>--all</code> to search all branches.
DThe string 'init' is too short and ignored by git log.
Attempts:
2 left
💡 Hint

Think about what -S actually searches for in commits.

🧠 Conceptual
advanced
2:00remaining
What is the difference between git log -S and git log -G?

Both git log -S and git log -G search commit history. What is the key difference between them?

A<code>-S</code> searches author names; <code>-G</code> searches file names.
B<code>-S</code> searches commit messages; <code>-G</code> searches code changes.
C<code>-S</code> searches only the latest commit; <code>-G</code> searches all commits.
D<code>-S</code> searches for changes in the number of occurrences of a string; <code>-G</code> searches for commits matching a regex pattern.
Attempts:
2 left
💡 Hint

Consider how -S and -G treat the search string.

🔀 Workflow
expert
3:00remaining
How to find the first commit that introduced the string TODO using git log -S?

You want to find the very first commit in your repository history that introduced the string TODO. Which sequence of commands or options will help you achieve this?

Agit log -S'TODO' --reverse
Bgit log -S'TODO' --reverse --ancestry-path --all
Cgit log -S'TODO' --all --reverse --max-count=1
Dgit log -S'TODO' --max-count=1
Attempts:
2 left
💡 Hint

Think about how to reverse the order and limit results to find the first commit.

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