Skip to content

Blaming

Output can be restricted by specifying line ranges as

git blame -L <start>,<end>

Where <start> and <end> can be:

  • line number `git blame -L 10,30`
  • /regex/ `git blame -L /void main/`, `git blame -L 46,/void foo/`
  • +offset, -offset (only for ``) `git blame -L 108,+30`, `git blame -L 215,-15`
  • Multiple line ranges can be specified, and overlapping ranges are allowed.

    git blame -L 10,30 -L 12,80 -L 120,+10 -L ^/void main/,+40

    git blame <file>

    will show the file with each line annotated with the commit that last modified it.

    Sometimes repos will have commits that only adjust whitespace, for example fixing indentation or switching between tabs and spaces. This makes it difficult to find the commit where the code was actually written.

    git blame -w

    will ignore whitespace-only changes to find where the line really came from.

    // Shows the author and commit per line of specified file
    git blame test.c
    // Shows the author email and commit per line of specified
    git blame -e test.c file
    // Limits the selection of lines by specified range
    git blame -L 1,10 test.c
    • git blame [filename]
    • git blame [-f][-e][-w][filename]
    • git blame [-L range][filename]
    ParameterDetails
    filenameName of the file for which details need to be checked
    -fShow the file name in the origin commit
    -eShow the author email instead of author name
    -wIgnore white spaces while making a comparison between child and parent’s version
    -L start,endShow only the given line range Example: git blame -L 1,2 [filename]
    —show-statsShows additional statistics at end of blame output
    -lShow long rev (Default: off)
    -tShow raw timestamp (Default: off)
    -reverseWalk history forward instead of backward
    -p, —porcelainOutput for machine consumption
    -MDetect moved or copied lines within a file
    -CIn addition to -M, detect lines moved or copied from other files that were modified in the same commit
    -hShow the help message
    -cUse the same output mode as git-annotate (Default: off)
    -nShow the line number in the original commit (Default: off)

    The git blame command is very useful when it comes to know who has made changes to a file on a per line base.