Grep存储库中的所有提交

时间:2018-05-07 03:56:02

标签: git

我有一个相当大的软件项目的git存储库。我想搜索某个子字符串的每个提交消息。我不是只查找当前分支上的提交,而是查找存储库知道的每个提交。

结果不一定是任何特定的顺序(尽管如果有一些顺序,那就太好了)。这可能吗?我该怎么做呢?我看到“git log -c -S”很有用,但这似乎适用于当前分支。

任何建议或帮助都将不胜感激!

3 个答案:

答案 0 :(得分:2)

--all标志考虑本地存储库知道的每个分支:

git log --all --grep="substring"

答案 1 :(得分:2)

要搜索给定文本的提交日志(跨所有分支):

git log --all --grep='Build 0051'

要通过回购历史记录搜索提交的实际内容,请使用:

git grep 'Build 0051' $(git rev-list --all)

显示给定文本的所有实例,包含文件名和提交sha1。

最后,作为最后的手段,如果您的提交悬空并且根本没有连接到历史记录,您可以使用-g标记(--walk-reflogs的缩写:

搜索reflog本身
git log -g --grep='Build 0051'

编辑:如果您似乎丢失了历史记录,请将reflog作为您的安全网。在

列出的一个提交中查找Build 0051
git reflog

您可能只是将HEAD设置为历史记录的一部分,其中“Build 0051”提交不可见,或者您可能实际上已将其炸毁。 git-ready reflog文章可能有所帮助。

要从reflog中恢复您的提交:执行您找到的提交的git checkout(并可选择创建一个新的分支或标记以供参考)

git checkout 77b1f718d19e5cf46e2fab8405a9a0859c9c2889
# alternative, using reflog (see git-ready link provided)
# git checkout HEAD@{10}
git checkout -b build_0051 # make a new branch with the build_0051 as the tip.

答案 2 :(得分:1)

您可以使用$ git log -g --grep=search_for_this。还有一些GUI客户端用于跟踪您的回购。搜索所有分支中的提交都是可能的。如果您想尝试GUI,可以检查awesome-git repo out。

编辑:我刚试过--all旗帜,它也有效。您也可以使用

$ git log --all --grep=search_for_this