I need to search the history o开发者_如何学编程f a specific file in a git repository to find a line that is gone. The commit message will not have any relevant text to search on. What command do I use?
Further details: this is the history of my todo list out of our non-stellar task tracking software. I've been keeping it for two years because there's just not enough information kept for me in the software. My commit messages usually have only the task ids, unfortunately, and what I need to do is find a closed task by subject, not by number. Yes, the real solution is better task tracking software, but that is completely out of my hands.
This is a job for the pickaxe!
From the git-log manpage:
-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.
You can of course use further options to narrow it down, for example:
git log -Sfoobar --since=2008.1.1 --until=2009.1.1 -- path_containing_change
There is also:
-G<regex>
Look for differences whose patch text contains added/removed lines that match . To illustrate the difference between -S --pickaxe-regex and -G, consider a commit with the following diff in the same file:
+ return frotz(nitfol, two->ptr, 1, 0);
...
- hit = frotz(nitfol, mf2.ptr, 1, 0);
While
git log -G"frotz\(nitfol"
will show this commit,git log -S"frotz\(nitfol" --pickaxe-regex
will not (because the number of occurrences of that string did not change).
How about git log --stat | grep 'filename'
to begin narrowing it down?
精彩评论