我要提交许多文件。我想搜索所有删除的字符串(或正则表达式),并显示包含匹配的文件列表(理想情况下包含删除的相关摘录)。
使用git log -p -S 'string',我可以滚动和搜索所有更改,但我不知道如何将输出限制为某个提交,也不能预先过滤删除项(我可以用^-开始我的正则表达式,但这很混乱)。
发布于 2021-04-12 06:21:06
使用git log -p -S 'string',我可以滚动和搜索所有更改,但我不知道如何将输出限制为某个提交...
这一部分很简单:git log的主要功能是从某个特定的提交开始,一个接一个地遍历提交(向后,就像Git总是做的那样)。默认情况下,如果您没有指定从哪个提交开始,则从HEAD提交开始,然后一直执行下去。但是如果您指定了一个特定的提交,它将从那里开始-和,使用-n,您可以告诉它遍历多少个提交,所以如果您将其设置为1,那么在遍历您指定的一个提交之后,它将“向后遍历”零次:
git log -n 1 -p -S 'string' <hash-id>例如。
您也可以使用--no-walk来达到相同的效果。如果您想要检查两个或三个特定的提交,这会更有用:
git log --no-walk -p -S 'string' <hash1> <hash2> <hash3>例如。
和我不能提前过滤删除的内容(我可以用^开始我的正则表达式--但那很混乱)。
在这里,git log并没有多大帮助。但是,您可以将git log的输出重定向到一个文件,然后使用任何适当的命令打开该文件,这些命令使您可以轻松地找到删除的内容(grep、您的编辑器等等)。
请注意,^-.*<string>并不意味着查找删除的更改,而是查找以-开头的更改文本。除非您正在查看补丁文件本身,以便文件中的文本以-开头,否则这不会有任何帮助。git log作为所示修补程序的一部分生成的-不包括在正则表达式搜索中,即使使用--pickaxe-regex也是如此。
您可以考虑在--reverse中使用git blame。
发布于 2021-04-13 00:03:20
一旦您有了目标提交的散列,您就可以使用:
# 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 ...,检查出现次数减少的文件https://stackoverflow.com/questions/67045370
复制相似问题