我有一个相当大的软件项目的git存储库。我想搜索某个子字符串的每个提交消息。我不是只查找当前分支上的提交,而是查找存储库知道的每个提交。
结果不一定是任何特定的顺序(尽管如果有一些顺序,那就太好了)。这可能吗?我该怎么做呢?我看到“git log -c -S”很有用,但这似乎适用于当前分支。
任何建议或帮助都将不胜感激!
答案 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
的缩写:
git log -g --grep='Build 0051'
编辑:如果您似乎丢失了历史记录,请将reflog
作为您的安全网。在
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