Malvolio Malvolio - 3 months ago 20
Git Question

How do I "git blame" a deleted line?

git blame
is great for modified and added lines but how can I find when a line that existed in a specific previous commit was eventually deleted. I'm thinking
bisect
but I was hoping for something handier.

[ before you ask: in the case, I just did a
git log -p
and searched through for the code line and (a) some idiot had just deleted the vital line in the previous commit and (b) I was that idiot ]

Answer

If you know the contents of the line, this is an ideal use case for:

git log -S <string> path/to/file

which shows you commits which introduce or remove an instance of that string. There's also the -G<regex> which does the same thing with regular expressions! See man git-log and search for the -G and -S options, or pickaxe (the friendly name for these features) for more information.

The -S option is actually mentioned in the header of the git-blame manpage too, in the description section, where it gives an example using git log -S....

Comments