我但願可以找到任何分支中任何提交中引入的某個字符串,我該怎麼作? 我發現了一些東西(我爲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個提交併找到了確切的提交,其中引入了問題。 太棒了