There are a few issues with the solutions listed here (even accepted).
You do not need to list all the hashes as you'll get duplicates. Also, it takes more time.
It builds on this where you can search a string "test -f /"
on multiple branches master
and dev
as
git grep "test -f /" master dev
which is same as
printf "master\ndev" | xargs git grep "test -f /"
So here goes.
This finds the hashes for the tip of all local branches and searches only in those commits:
git branch -v --no-abbrev | awk -F' *' '{print $3}' | xargs git grep "string/regexp"
If you need to search in remote branches too then add -a
:
git branch -a -v --no-abbrev | awk -F' *' '{print $3}' | xargs git grep "string/regexp"
Further:
# Search in local branches
git branch | cut -c3- | xargs git grep "string"
# Search in remote branches
git branch -r | cut -c3- | xargs git grep "string"
# Search in all (local and remote) branches
git branch -a | cut -c3- | cut -d' ' -f 1 | xargs git grep "string"
# Search in branches, and tags
git show-ref | grep -v "refs/stash" | cut -d' ' -f2 | xargs git grep "string"
grep
(search through) committed code in the Git history – Linin