在Git代码库中,我想列出包含特定单词的所有提交 . 我试过这个
git log -p | grep --context=4 "word"
但它并不一定会给我回文件名(除非它比我搜索的单词少了5行 . 我也尝试过
git grep "word"
但它只给我现在的文件,而不是历史 .
如何搜索整个历史记录以便我可以跟踪特定单词的更改?我的意思是在我的代码库中搜索单词的出现以跟踪更改(在文件历史记录中搜索) .
如果要查找提交消息包含给定单词的所有提交,请使用
$ git log --grep=word
如果要查找在文件内容中添加或删除"word"的所有提交(更准确地说:"word"发生的更改次数),即搜索提交内容,请使用所谓的'pickaxe' search with
$ git log -Sword
在现代的git中也有
$ git log -Gword
查找添加或删除的行与"word"(也是提交内容)匹配的差异 .
请注意, -G 默认接受正则表达式,而 -S 接受字符串,但可以使用 --pickaxe-regex 修改为接受正则表达式 .
-G
-S
--pickaxe-regex
为了说明-S <regex> --pickaxe-regex和-G <regex>之间的区别,考虑在同一文件中使用以下diff进行提交:return!regexec(regexp,two-> ptr,1,&regmatch, 0);...
git log 的镐将找到包含"word"和 git log -Sword 的更改提交
git log
git log -Sword
经过大量的实验,我可以推荐以下内容,它显示引入或删除包含给定正则表达式的行的提交,并显示每个中的文本更改,颜色显示添加和删除的单词 .
git log --pickaxe-regex -p --color-words -S "<regexp to search for>"
需要一段时间才能运行... ;-)
还有一种方法/语法: git log -S "word"像这样你可以搜索例子 git log -S "with whitespaces and stuff @/#ü !"
git log -S "word"
git log -S "with whitespaces and stuff @/#ü !"
您可以尝试以下命令:
git log --patch --color=always | less +/searching_string
或以下列方式使用 grep :
grep
git rev-list --all | GIT_PAGER=cat xargs git grep 'search_string'
在要搜索的父目录中运行此命令 .
vim-fugitive用于Vim中的这种检查 .
使用 :Ggrep 来做到这一点 . 有关更多信息,您可以安装vim-fugitive并通过 :help Grep 查找turorial . 而这一集:exploring-the-history-of-a-git-repository将指导你做所有这些 .
:Ggrep
:help Grep
要在正则表达式上使用布尔连接器:
git log --grep '[0-9]*\|[a-z]*'
此正则表达式在提交消息上搜索正则表达式[0-9] *或[a-z] * .
如果你想搜索敏感数据,以便从你的git历史中删除它(这就是我登陆这里的原因),有一些工具可以解决这个问题 . Github为a dedicated help page for that issue .
这是文章的要点:
BFG Repo-Cleaner是一种更快,更简单的git filter-branch替代方案,用于删除不需要的数据 . 例如,要删除包含敏感数据的文件并保持最新的提交不变,请运行:
bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA
要替换在repository.txt中列出的所有文本,只要在存储库的历史记录中找到它,运行:
bfg --replace-text passwords.txt
有关完整用法和下载说明,请参阅BFG Repo-Cleaner的文档 .
8 回答
如果要查找提交消息包含给定单词的所有提交,请使用
如果要查找在文件内容中添加或删除"word"的所有提交(更准确地说:"word"发生的更改次数),即搜索提交内容,请使用所谓的'pickaxe' search with
在现代的git中也有
查找添加或删除的行与"word"(也是提交内容)匹配的差异 .
请注意,
-G
默认接受正则表达式,而-S
接受字符串,但可以使用--pickaxe-regex
修改为接受正则表达式 .而git log -G“regexec \(regexp”将显示此提交,git log -S“regexec \(regexp”--pickaxe-regex不会(因为该字符串的出现次数没有改变) .
git log
的镐将找到包含"word"和git log -Sword
的更改提交经过大量的实验,我可以推荐以下内容,它显示引入或删除包含给定正则表达式的行的提交,并显示每个中的文本更改,颜色显示添加和删除的单词 .
需要一段时间才能运行... ;-)
还有一种方法/语法:
git log -S "word"
像这样你可以搜索例子
git log -S "with whitespaces and stuff @/#ü !"
您可以尝试以下命令:
或以下列方式使用
grep
:在要搜索的父目录中运行此命令 .
vim-fugitive用于Vim中的这种检查 .
使用
:Ggrep
来做到这一点 . 有关更多信息,您可以安装vim-fugitive并通过:help Grep
查找turorial . 而这一集:exploring-the-history-of-a-git-repository将指导你做所有这些 .要在正则表达式上使用布尔连接器:
此正则表达式在提交消息上搜索正则表达式[0-9] *或[a-z] * .
如果你想搜索敏感数据,以便从你的git历史中删除它(这就是我登陆这里的原因),有一些工具可以解决这个问题 . Github为a dedicated help page for that issue .
这是文章的要点: