如何找到在任何分支中引入字符串的Git提交?

我但愿可以找到任何分支中任何提交中引入的某个字符串,我该怎么作? 我发现了一些东西(我为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


#1楼

Mark Longair的答案很是好,但我发现这个更简单的版本适合我。 ide

git log -S whatever

#2楼

用相同的答案搞清楚: spa

$ git config --global alias.find '!git log --color -p -S '
  • 由于其余方式,git不能正确地将参数传递给-S。 看到这个回复
  • --color-p有助于准确显示“whatchanged”

如今你能够作到 code

$ git find <whatever>

要么 字符串

$ git find <whatever> --all
$ git find <whatever> master develop

#3楼

--reverse也颇有帮助,由于您须要进行更改的第一个提交: get

git log --all -p --reverse --source -S 'needle'

这样,旧的提交将首先出现。 string


#4楼

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

#5楼

虽然这不能直接回答你的问题,但我认为这对你来讲多是一个很好的解决方案。 我看到了个人一部分代码,这很糟糕。 不知道是谁写的或什么时候写的。 我能够看到文件中的全部更改,但很明显代码已从其余文件移到此文件中。 我想找到谁首先实际添加它。 io

为此,我使用了Git bisect ,很快就让我找到了罪人。

我运行git bisect start而后git bisect bad ,由于签出的修订版有问题。 因为我不知道问题什么时候发生,我将第一次提交为“好”, git bisect good <initial sha>

而后我一直在搜索回购代码以查找错误的代码。 当我找到它时,我运行了git bisect bad ,当它不存在时: git bisect good

在大约11个步骤中,我已经覆盖了~1000个提交并找到了确切的提交,其中引入了问题。 太棒了

相关文章
相关标签/搜索