Search All of Your Git History for Code and Commits with 2 Commands
Search your git repos for any string / regex, even across branches. This is handy to recall something from days, weeks or years ago.
You can use the git grep
(or rg
, etc.) command to search through code in
the current git working tree / directory but what if you want to search for
something in an older commit?
If you’re searching for code within commits you can use the git “pickaxe” flag, here’s a few examples. All of these commands will identify specific commits that contain your search term at least once and you can choose to see the matches too:
# Show commits that contains the code, then you can: git show <commit_sha>
git log -S "whatever you want to search for"
# An even easier way to show matches right there on the spot
git log -S "your search term" -p
# Same as above, except applied to all branches instead of the checked out branch
git log -S "something" -p --all
# Limit your search to only specific files in a specific directory
git log -S "something specific" -p -- **/models/user*.py
# Search for a regex instead of a string (note the -G instead of -S)
git log -G '^alias \w+=".*"$' -p
Now let’s say you don’t remember the code but instead you remember reading or committing a specific message. Git lets you search commit messages too:
# Show the commit message that contains your search term, you can supply either
# a string or regular expression with the same flag
git log --grep "your search term"
# Same as above, except applied to all branches instead of the checked out branch
git log --grep "something else" --all
# Demo Video
Timestamps
- 0:52 – Searching for a string in code that exists in any commit
- 2:09 – Quality of life improvement for searching with the patch flag
- 2:57 – Applying this to all branches with the all flag
- 3:50 – Filter the matches by a specific directory or file type
- 5:58 – Doing a regex search in code in any commit
- 7:37 – Searching through git commit messages with strings or a regex
Reference Links
I use these commands a few times a month, how about you? Let me know below.