Git 如何在提交中搜索所有删除?
我有一个包含许多文件的提交。我希望搜索所有删除的字符串(或正则表达式),并显示包含匹配项的文件列表(理想情况下为删除的相关摘录) 使用Git 如何在提交中搜索所有删除?,git,git-diff,Git,Git Diff,我有一个包含许多文件的提交。我希望搜索所有删除的字符串(或正则表达式),并显示包含匹配项的文件列表(理想情况下为删除的相关摘录) 使用git log-p-S'string'我可以滚动并搜索所有更改,但我不知道如何将输出限制为某个提交,并且我无法提前筛选删除项(我可以使用^-启动我的正则表达式,但这很麻烦) 使用git log-p-S'string'我可以滚动并搜索所有更改,但我不知道如何将输出限制为某个提交 这一部分很简单:git log的主要功能是从某个特定的提交开始,一个接一个地遍历提交(向
git log-p-S'string'
我可以滚动并搜索所有更改,但我不知道如何将输出限制为某个提交,并且我无法提前筛选删除项(我可以使用^-
启动我的正则表达式,但这很麻烦)
使用git log-p-S'string'
我可以滚动并搜索所有更改,但我不知道如何将输出限制为某个提交
这一部分很简单:git log
的主要功能是从某个特定的提交开始,一个接一个地遍历提交(向后,git总是这样)。默认设置是从头开始
commit,如果您没有指定从哪个commit开始,则会一直持续下去。但是如果您确实指定了一个特定的提交,它将从那里开始-和,使用-n
,您可以告诉它要执行多少次提交,因此如果您将此设置为1
,它将在执行您指定的一个提交后再“向后走”零次:
git log -n 1 -p -S 'string' <hash-id>
比如说
而且我不能预先筛选删除项(我可以用^开始我的正则表达式,但那太乱了)
在这里,git log
并没有多大帮助。但是,您可以将git log
的输出重定向到一个文件,然后使用任何合适的命令打开该文件,以便轻松找到删除内容(grep
,您的编辑器,等等)
请注意,^-.*
并不意味着查找删除的更改,而是查找以-
开头的更改文本。除非您查看的是补丁文件本身,因此文件中的文本以-
开头,否则这不会有帮助。作为所示修补程序的一部分,由git log生成的-
不包括在正则表达式搜索中,即使使用--pickaxe正则表达式
您可以考虑使用<代码> Git Real/<代码> <代码> -Re>>
< P>一旦您有目标提交的哈希,您可以使用:# to get the list of matches in that commit :
git grep -e 'string' hash
# to get the list of matches in that commit's parent :
git grep -e 'string' hash^
git grep
还有一个-c
选项,用于打印每个文件的匹配计数,而不是完整的行
您可以将其用作脚本的输入:
- 如果您的意思是“搜索出现次数减少的所有文件”:逐个文件比较git grep-c…,并检查出现次数减少的文件
- 如果您的意思是“在全局发生次数减少的情况下保持提交”:将各个计数相加并进行比较
- 等等
# to get the list of matches in that commit :
git grep -e 'string' hash
# to get the list of matches in that commit's parent :
git grep -e 'string' hash^