Answers:
如果要查找所有提交消息中包含给定单词的提交,请使用
$ git log --grep=word
如果要查找在文件内容中添加或删除了“单词”的所有提交(更确切地说:“单词”的出现次数已更改的位置),即搜索提交内容,请使用所谓的“ pickaxe”搜索
$ git log -Sword
在现代git中,
$ git log -Gword
查找添加或删除的行与“ word”相匹配的差异(也提交内容)。
请注意,-G
默认情况下接受正则表达式,而-S
接受字符串,但是可以使用进行修改以接受正则表达式--pickaxe-regex
。
为了说明之间的区别
-S<regex> --pickaxe-regex
,并-G<regex>
考虑在同一个文件中的以下DIFF提交:+ return !regexec(regexp, two->ptr, 1, ®match, 0); ... - hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
虽然
git log -G"regexec\(regexp"
将显示此提交,但git log -S"regexec\(regexp" --pickaxe-regex
不会(因为该字符串的出现次数未更改)。
使用Git 2.25.1(2020年2月),围绕这些正则表达式澄清了文档。
参见MartinÅgren(``)提交的9299f84(2020年2月6日)。
(通过合并JUNIOÇ滨野- gitster
-在提交0d11410,2020年2月12日)
diff-options.txt
:在示例中避免“ regex”重载报告人:Adam Dinwoodie
签名人:MartinÅgren
评论人:Taylor Blau当我们举例说明之间的差异
-G
和-S
(使用--pickaxe-regex
),我们可能会使用一个例子diff和git diff
调用涉及“regexec”,“正则表达式”,“regmatch”,...这个例子是正确的,但是我们可以避免编写“ regex。*”,从而使它更容易解开,除非确实需要我们指出这一点。
改用一些虚构的,非正规的单词。
该git diff
文档现在包括:
为了说明之间的区别
-S<regex> --pickaxe-regex
,并-G<regex>
考虑在同一个文件中的以下DIFF提交:+ return frotz(nitfol, two->ptr, 1, 0); ... - hit = frotz(nitfol, mf2.ptr, 1, 0);
虽然
git log -G"frotz\(nitfol"
将显示此提交,但git log -S"frotz\(nitfol" --pickaxe-regex
不会(因为该字符串的出现次数未更改)。
-S<string>
寻找引入或删除<string>实例的差异。-G<string>
查找其添加或删除的行与给定的<regex>相匹配的差异。
-S<string>
速度更快,因为它仅检查是否发生<string>
更改的次数,而-G<string>
在每个提交差异中搜索添加和删除的行。
git log --grep="my words"
。
--grep
与-S
和不同-G
。您可以在每个这些参数中加上字符串。
git log
的镐会发现包含“ word”在内的更改的提交 git log -Sword
经过大量的实验,我可以推荐以下内容,其中显示了引入或删除包含给定regexp的行的提交,并显示了每行中的文本更改,颜色显示了添加和删除的单词。
git log --pickaxe-regex -p --color-words -S "<regexp to search for>"
虽然需要一段时间才能运行... ;-)
GIT_PAGER=cat
或附加| cat
git log --pickaxe-regex -p --color-words -S "<regexp to search for>" <file or fiepath>
您可以尝试以下命令:
git log --patch --color=always | less +/searching_string
或grep
以以下方式使用:
git rev-list --all | GIT_PAGER=cat xargs git grep 'search_string'
在要搜索的父目录中运行此命令。
git log --patch --color=always | less +/searching_string
。
vim-fugitive对于在Vim中进行这种检查是通用的。
使用:Ggrep
做到这一点。有关更多信息,您可以安装vim-fugitive并通过查找turorial :help Grep
。而这一集:探索git存储库的历史将指导您完成所有这些工作。
如果您想搜索敏感数据以便将其从git历史记录中删除(这就是我登陆此处的原因),那么可以使用一些工具。Github作为该问题的专用帮助页面。
这是本文的要旨:
的BFG回购清机是与git滤波器分支更快,更简单的替代用于去除不想要的数据。例如,要删除包含敏感数据的文件并保持最新提交不变,请运行:
bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA
要替换在passwords.txt中列出的所有文本,只要在存储库的历史记录中可以找到它,请运行:
bfg --replace-text passwords.txt
有关完整用法和下载说明,请参见BFG Repo-Cleaner的文档。