Home > Blockchain >  GIT: How to search through older versions of a file and list all versions that match the search crit
GIT: How to search through older versions of a file and list all versions that match the search crit

Time:10-12

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
  • Related