不同git搜索命令之间的差异

时间:2017-11-15 12:54:04

标签: git

来自初学者的问题:有几种方法可以搜索git历史记录。 对我来说,目前尚不清楚命令之间的区别是什么:

  1. git log,例如git log -S 'for what you search' --all在所有分支中搜索字符串 git log -G 'search for regexpr' --all搜索regexpr。请参阅示例here
  2. git log --grep 'pattern'
  3. git rev-list,例如git rev-list --grep='string' --all
  4. git grep,例如来自here
  5. git grep "string or regexpr" $(git rev-list --all)
  6. gitk,例如gitk file.txt一个gui界面(后来添加,因为当我写这个问题时我不知道这个选项)
  7. git log --all --full-history -- **/thefile.*在历史记录中搜索文件名(稍后为here的完整性添加)。
  8. git diff --word-diff-regex=. > changes.txtgrep -oP '\+[^\+]+\+' changes.txt | tr -d '\+'相结合,以字符为基础显示更改。来自here,稍后补充。如果尚未提交更改,这甚至可以正常工作。
  9. 我的理解很差

    • 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:据我所知,我可以搜索以下字段:

    • 文件内容
    • 文件差异
    • blob object
    • 树对象
    • 提交对象
    • 标记对象

1 个答案:

答案 0 :(得分:2)

  

git log搜索提交消息?

是。选项-S/-G搜索改变所提及文本的出现次数(即添加或删除)的提交。 --grep搜索整个提交消息。

  

git grep似乎无处不在:文件,blob,树和提交对象?

不,仅限于文件(即blob)。