我有一个包含某个文件的repo。我需要创建一个git脚本,该脚本搜索此文件的所有先前版本,并列出包含特定字符串的提交sha。我想有一个列表的所有提交的版本字符串存在。
我能找到的最好的答案在这里(但还不够好):https://stackoverflow.com/a/4705617/4441211这个解决方案不够好,因为它只能找到有变化的地方(即搜索词被添加或删除)。有人有更好的办法吗?
查找模式<pattern>
中文件<path/to/file>
中的提交<commit>
:使用git grep
git grep -e <pattern> <commit> -- <path/to/file>
查看git help grep
了解更多细节:许多选项都复制了原始的grep
命令(-l
只列出文件名,-q
删除输出…)
如果你的意图是扫描所有的提交来寻找一个字符串(而不仅仅是发生更改的提交):
git rev-list HEAD
会给你的列表中所有提交的祖先活跃的分支,- 写一个循环来重复调用
git grep
。
例如:
git rev-list HEAD | while read sha; do
git grep -q -e <pattern> $sha -- <path/to/file> && echo $sha
done