Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何在提交中搜索所有删除?_Git_Git Diff - Fatal编程技术网

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^