来自初学者的问题:有几种方法可以搜索git历史记录。 对我来说,目前尚不清楚命令之间的区别是什么:
git log
,例如git log -S 'for what you search' --all
在所有分支中搜索字符串
git log -G 'search for regexpr' --all
搜索regexpr。请参阅示例here git log --grep 'pattern'
git rev-list
,例如git rev-list --grep='string' --all
git grep
,例如来自here git grep "string or regexpr" $(git rev-list --all)
gitk
,例如gitk file.txt
一个gui界面(后来添加,因为当我写这个问题时我不知道这个选项)git log --all --full-history -- **/thefile.*
在历史记录中搜索文件名(稍后为here的完整性添加)。git diff --word-diff-regex=. > changes.txt
与grep -oP '\+[^\+]+\+' changes.txt | tr -d '\+'
相结合,以字符为基础显示更改。来自here,稍后补充。如果尚未提交更改,这甚至可以正常工作。我的理解很差
git log
搜索提交消息?它似乎基于rev-list
?来自文档:显示提交日志。该命令采用适用于git的选项 rev-list命令用于控制显示的内容以及方式和选项 适用于git diff- *命令来控制每个变化的方式 显示了提交介绍。
git-rev-list
似乎是一个更基本的命令,因为它在提交对象(或树对象?)上运行。来自文档:git-rev-list - 以反向时间顺序列出提交对象
git grep
似乎无处不在:文件,blob,树和提交对象?来自文档:git-grep - 打印与图案匹配的线条。寻找指定的模式 在工作树中的跟踪文件中,blobs在索引中注册 给定树对象中的文件或blob。模式是一个或的列表 更多由换行符分隔的搜索表达式。一个空的 字符串作为搜索表达式匹配所有行。
我使用Git book作为参考。
编辑@phd:据我所知,我可以搜索以下字段:
答案 0 :(得分:2)
git log
搜索提交消息?
是。选项-S/-G
搜索改变所提及文本的出现次数(即添加或删除)的提交。 --grep
搜索整个提交消息。
git grep
似乎无处不在:文件,blob,树和提交对象?
不,仅限于文件(即blob)。