I have a repo that contains a certain file. I need to create a git script that searches through all the previous versions of this file and lists the commit SHAs that contain a specific string. I want to have a list of all the commits that in their version that string exists.
The best answer I could find is here (but not good enough): https://stackoverflow.com/a/4705617/4441211 This solution is not good enough because this only finds where there was a change (i.e the search term was added or removed). Does anybody have a better idea how to do this?
CodePudding user response:
To look for a pattern <pattern>
in a file <path/to/file>
within a commit <commit>
: use git grep
git grep -e <pattern> <commit> -- <path/to/file>
Check git help grep
for more details : many options are copied of the original grep
command (-l
to only list file names, -q
to drop output ...)
If your intention is to scan all commits looking for a string (not just the commits where a change occured) :
git rev-list HEAD
will give you the list of all commits in the ancestry of your active branch,- write a loop to repeatedly call
git grep
on these commits.
For example :
git rev-list HEAD | while read sha; do
git grep -q -e <pattern> $sha -- <path/to/file> && echo $sha
done