Git history - find lost line by keyword

自闭症网瘾萝莉.ら 提交于 2019-12-18 10:12:31

问题


I had somewhere in my Git repository a line containing word "Foo" a couple hundreds commits before.

If there is any way to find its revision number where it was the last time without buying FishEye?


回答1:


That may be addressed by the pickaxe (-S) option of gitlog

 git log -SFoo -- path_containing_change

(you can even add a time range: --since=2009.1.1 --until=2010.1.1)

-S<string>

Look for differences that introduce or remove an instance of <string>.
Note that this is different than the string simply appearing in diff output; see the pickaxe entry in gitdiffcore(7) for more details.

diffcore-pickaxe

This transformation is used to find filepairs that represent changes that touch a specified string.
When diffcore-pickaxe is in use, it checks if there are filepairs whose "original" side has the specified string and whose "result" side does not.
Such a filepair represents "the string appeared in this changeset".
It also checks for the opposite case that loses the specified string.


Update 2014:

Since then, you can do (from nilbus's answer):

git log -p --all -S 'search string'
git log -p --all -G 'match regular expression'

These log commands list commits that add or remove the given search string/regex, (generally) more recent first.
The -p (--patch) option causes the relevant diff to be shown where the pattern was added or removed, so you can see it in context.

Having found a relevant commit that adds the text you were looking for (eg. 8beeff00d), find the branches that contain the commit:

git branch -a --contains 8beeff00d

(I reference that last command in "How to list branches that contain a given commit?")




回答2:


Worst case scenario, use git bisect and grep?



来源:https://stackoverflow.com/questions/2839253/git-history-find-lost-line-by-keyword

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!