我希望能够找到在任何分支的任何提交中引入的某个字符串,我该怎么做?我发现了一些东西(我为 Win32 修改的),但git whatchanged似乎没有查看不同的分支(忽略 py3k 块,它只是一个 msys/win 换行修复)
git whatchanged
git whatchanged -- <file> | \ grep "^commit " | \ python -c "exec(\"import sys,msvcrt,os\nmsvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)\nfor l in sys.stdin: print(l.split()[1])\")" | \ xargs -i% git show origin % -- <file>
您的解决方案是否缓慢并不重要。
你可以做:
git log -S <whatever> --source --all
查找添加或删除 固定字符串 whatever的所有提交。该--all参数表示从每个分支开始,并--source表示显示哪些分支导致找到该提交。-p添加以显示每个提交也会引入的补丁通常很有用。
whatever
--all
--source
-p
自 1.7.4 以来的 git 版本也有一个类似的 -G 选项,它采用正则表达式。这实际上具有不同(而且更明显)的语义,在Junio Hamano 的这篇博客文章中进行了解释。
-G
正如评论中指出的那样,如果搜索词包含空格或其他特殊字符,则需要在搜索词周围加上引号,例如:
git log -S 'hello world' --source --all git log -S "dude, where's my car?" --source --all
-G这是一个用于查找出现的示例function foo() {:
function foo() {
git log -G "^(\s)*function foo[(][)](\s)*{$" --source --all