我有一个相当大的软件项目的 Git 存储库。我想在每条提交消息中搜索某个子字符串。我不只是寻找当前分支上的提交,而是寻找存储库知道的每一个提交。
结果不必按任何特定顺序(尽管如果有某种顺序,那就太好了)。这可能吗?我该怎么做呢?我发现“git log -c -S”很有用,但这似乎适用于当前分支。
bei*_*ish 10
要在提交日志(跨所有分支)中搜索给定文本:
git log --all --grep='Build 0051'
Run Code Online (Sandbox Code Playgroud)
要通过存储库的历史记录搜索提交的实际内容,请使用:
git grep 'Build 0051' $(git rev-list --all)
Run Code Online (Sandbox Code Playgroud)
显示给定文本的所有实例、包含的文件名以及提交SHA-1的值。
最后,作为最后的手段,如果您的提交悬而未决并且根本没有连接到历史记录,您可以使用标志-g(缩写为--walk-reflogs:
git log -g --grep='Build 0051'
Run Code Online (Sandbox Code Playgroud)
如果您似乎丢失了历史记录,请检查reflog作为您的安全网。在列出的提交之一中查找 Build 0051
git reflog
Run Code Online (Sandbox Code Playgroud)
您可能只是将您的HEAD历史记录设置为“Build 0051”提交不可见的一部分,或者您可能实际上已经将其删除了。git -ready reflog 文章可能会有所帮助。
要从引用日志恢复您的提交:对您找到的提交进行 Git 签出(并可选择为其创建一个新分支或标签以供参考)
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.
Run Code Online (Sandbox Code Playgroud)