git-blame [-c] [-l] [-t] [-f] [-n] [-p] [-L n,m] [-S <revs-file>]
[-M] [-C] [-C] [--since=<date>] [<rev>] [--] <file>
Also it can limit the range of lines annotated.
This report doesn't tell you anything about lines which have been deleted or replaced; you need to use a tool such as git-diff(1) or the "pickaxe" interface briefly mentioned in the following paragraph.
Apart from supporting file annotation, git also supports searching the development history for when a code snippet occured in a change. This makes it possible to track when a code snippet was added to a file, moved or copied between files, and eventually deleted or replaced. It works by searching for a text string in the diff. A small example:
$ git log --pretty=oneline -S'blame_usage' 5040f17eba15504bad66b14a645bddd9b015ebb7 blame -S <ancestry-file> ea4c7f9bf69e781dd0cd88d2bccb2bf5cc15c9a7 git-blame: Make the output