我需要找到在存储库中的任何文件中添加或删除的特定字符串的每个实例。
到目前为止,我已经尝试了
git log -S'string' --all
git log --follow -p path/to/file
git show --pretty="format:" --name-only <hash>
git diff $(git log -S'string' -i --all --pretty="%H") | tee output.txt
各种组合。
我能得到的是一份包含数千个文件的列表,这些文件属于提交的一部分&#39;字符串&#39;。我需要一个仅列出那些在某些时候包含&#39; string&#39;的文件的列表。
答案 0 :(得分:4)
git log -Sstring -p
提供所有输出,并且很容易提取文件名:
git log -p -Sstring --all | grep '^---\|^+++' | grep -v /dev/null \
| sed 's%^\(---\|+++\) [ab]/%%'
答案 1 :(得分:0)
使用git grep
git log --all --format=format:%H | xargs -n 1 git grep -i -I --full-name "perl"
这个将为每次提交搜索perl的出现次数,输出是这样的。
c3eab7df88fdc5e848fd13fdab4298afd24f9ee8:bugzilla/bugzilla.pl:#!/usr/bin/perl
实际上可能无法解决您的问题,因为您想知道何时添加和删除
答案 2 :(得分:0)
您可以使用shell脚本迭代Git当前跟踪的所有文件,然后确定每个文件是否包含该字符串:
for f in $(git ls-files); do
commits=$(git log -S'string' --oneline -- $f | wc -l)
if [[ $commits -gt 0 ]]; then
echo $f
fi
done
这不会列出任何曾经包含该字符串但随后被删除的文件。