0

我试图弄清楚文件中最后一次包含某个字符串的时间

我找到了这个:

git rev-list --all | xargs git grep <search str> | grep <file name>

但这会对每个被修改过的文件运行 git grep,然后抛出所有不在感兴趣文件中的匹配项

所以,它有效,但它真的很慢

我如何告诉 git rev-list 只给我指定文件的修订版?

我试过了

git rev-list --all path/to/file.py

它只是给了我每个文件。所以我尝试了这些

git rev-list path/to/file.py
git rev-list -- path/to/file.py

但是对于两个 git 返回的帮助文本

4

1 回答 1

1

我试图弄清楚文件中最后一次包含某个字符串的时间

git log --oneline --no-merges -p -S 'that string' -- that/file

或者如果您也想知道合并删除的所有地方

git log --oneline -m -p -S 'that string' -- that/file

并检查补丁是否删除或添加了文本。


git rev-list不默认HEAD提交,您必须准确指定从哪里开始,这就是您后来的尝试失败的原因。


从评论中,您不仅要从文件中完全删除字符串,还要寻找从文件中特定位置删除该字符串的更改。对于那些,使用-Gnot -S-G寻找出现在 diffs 中的模式,其中-S忽略不改变出现总数的差异 --S做你要求的,但不是你想要的。

于 2022-02-24T03:06:53.557 回答