我但愿可以找到任何分支中任何提交中引入的某个字符串,我该怎么作? 我发现了一些东西(我为Win32修改过),但git whatchanged
彷佛没有调查不一样的分支(忽略py3k块,它只是一个msys / win行补丁修复) python
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
Mark Longair的答案很是好,但我发现这个更简单的版本适合我。 ide
git log -S whatever
用相同的答案搞清楚: spa
$ git config --global alias.find '!git log --color -p -S '
如今你能够作到 code
$ git find <whatever>
要么 字符串
$ git find <whatever> --all $ git find <whatever> master develop
--reverse也颇有帮助,由于您须要进行更改的第一个提交: get
git log --all -p --reverse --source -S 'needle'
这样,旧的提交将首先出现。 string
git log -S"string_to_search" # options like --source --reverse --all etc
注意不要在S和“string_to_search”之间使用空格。 在某些设置(git 1.7.1)中,您将收到以下错误: it
fatal: ambiguous argument 'string_to_search': unknown revision or path not in the working tree. Use '--' to separate paths from revisions
虽然这不能直接回答你的问题,但我认为这对你来讲多是一个很好的解决方案。 我看到了个人一部分代码,这很糟糕。 不知道是谁写的或什么时候写的。 我能够看到文件中的全部更改,但很明显代码已从其余文件移到此文件中。 我想找到谁首先实际添加它。 io
为此,我使用了Git bisect ,很快就让我找到了罪人。
我运行git bisect start
而后git bisect bad
,由于签出的修订版有问题。 因为我不知道问题什么时候发生,我将第一次提交为“好”, git bisect good <initial sha>
。
而后我一直在搜索回购代码以查找错误的代码。 当我找到它时,我运行了git bisect bad
,当它不存在时: git bisect good
。
在大约11个步骤中,我已经覆盖了~1000个提交并找到了确切的提交,其中引入了问题。 太棒了