</div>\r
<h2>SYNOPSIS</h2>\r
<div class="sectionbody">\r
-<p><em>git-blame</em> [-c] [-l] [-t] [-f] [-n] [-p] [-S <revs-file>] [--] <file> [<rev>]</p>\r
+<div class="verseblock">\r
+<div class="content"><em>git-blame</em> [-c] [-l] [-t] [-f] [-n] [-p] [-L n,m] [-S <revs-file>]\r
+ [-M] [-C] [-C] [--since=<date>] [<rev>] [--] <file></div></div>\r
</div>\r
<h2>DESCRIPTION</h2>\r
<div class="sectionbody">\r
<p>Annotates each line in the given file with information from the revision which\r
last modified the line. Optionally, start annotating from the given revision.</p>\r
+<p>Also it can limit the range of lines annotated.</p>\r
<p>This report doesn't tell you anything about lines which have been deleted or\r
replaced; you need to use a tool such as <a href="git-diff.html">git-diff(1)</a> or the "pickaxe"\r
interface briefly mentioned in the following paragraph.</p>\r
</p>\r
</dd>\r
<dt>\r
+-L n,m\r
+</dt>\r
+<dd>\r
+<p>\r
+ Annotate only the specified line range (lines count from\r
+ 1). The range can be specified with a regexp. For\r
+ example, <tt>-L <em>/<sup>sub esc_html /,/</sup>}$/</em></tt> limits the\r
+ annotation only to the body of <tt>esc_html</tt> subroutine.\r
+</p>\r
+</dd>\r
+<dt>\r
-l, --long\r
</dt>\r
<dd>\r
</p>\r
</dd>\r
<dt>\r
+-M\r
+</dt>\r
+<dd>\r
+<p>\r
+ Detect moving lines in the file as well. When a commit\r
+ moves a block of lines in a file (e.g. the original file\r
+ has A and then B, and the commit changes it to B and\r
+ then A), traditional <em>blame</em> algorithm typically blames\r
+ the lines that were moved up (i.e. B) to the parent and\r
+ assigns blame to the lines that were moved down (i.e. A)\r
+ to the child commit. With this option, both groups of\r
+ lines are blamed on the parent.\r
+</p>\r
+</dd>\r
+<dt>\r
+-C\r
+</dt>\r
+<dd>\r
+<p>\r
+ In addition to <tt>-M</tt>, detect lines copied from other\r
+ files that were modified in the same commit. This is\r
+ useful when you reorganize your program and move code\r
+ around across files. When this option is given twice,\r
+ the command looks for copies from all other files in the\r
+ parent for the commit that creates the file in addition.\r
+</p>\r
+</dd>\r
+<dt>\r
-h, --help\r
</dt>\r
<dd>\r
header, prefixed by a TAB. This is to allow adding more\r
header elements later.</p>\r
</div>\r
+<h2>SPECIFIYING RANGES</h2>\r
+<div class="sectionbody">\r
+<p>Unlike <tt>git-blame</tt> and <tt>git-annotate</tt> in older git, the extent\r
+of annotation can be limited to both line ranges and revision\r
+ranges. When you are interested in finding the origin for\r
+ll. 40-60 for file <tt>foo</tt>, you can use <tt>-L</tt> option like this:</p>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><tt>git blame -L 40,60 foo</tt></pre>\r
+</div></div>\r
+<p>When you are not interested in changes older than the version\r
+v2.6.18, or changes older than 3 weeks, you can use revision\r
+range specifiers similar to <tt>git-rev-list</tt>:</p>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><tt>git blame v2.6.18.. -- foo\r
+git blame --since=3.weeks -- foo</tt></pre>\r
+</div></div>\r
+<p>When revision range specifiers are used to limit the annotation,\r
+lines that have not changed since the range boundary (either the\r
+commit v2.6.18 or the most recent commit that is more than 3\r
+weeks old in the above example) are blamed for that range\r
+boundary commit.</p>\r
+<p>A particularly useful way is to see if an added file have lines\r
+created by copy-and-paste from existing files. Sometimes this\r
+indicates that the developer was being sloppy and did not\r
+refactor the code properly. You can first find the commit that\r
+introduced the file with:</p>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><tt>git log --diff-filter=A --pretty=short -- foo</tt></pre>\r
+</div></div>\r
+<p>and then annotate the change between the commit and its\r
+parents, using <tt>commit^!</tt> notation:</p>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><tt>git blame -C -C -f $commit^! -- foo</tt></pre>\r
+</div></div>\r
+</div>\r
<h2>SEE ALSO</h2>\r
<div class="sectionbody">\r
<p><a href="git-annotate.html">git-annotate(1)</a></p>\r
</div>\r
<h2>AUTHOR</h2>\r
<div class="sectionbody">\r
-<p>Written by Fredrik Kuivinen <freku045@student.liu.se>.</p>\r
+<p>Written by Junio C Hamano <junkio@cox.net></p>\r
</div>\r
<h2>GIT</h2>\r
<div class="sectionbody">\r
</div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 25-Oct-2006 22:55:21 UTC\r
+Last updated 09-Nov-2006 07:37:40 UTC\r
</div>\r
</div>\r
</body>\r
SYNOPSIS
--------
-'git-blame' [-c] [-l] [-t] [-f] [-n] [-p] [-S <revs-file>] [--] <file> [<rev>]
+[verse]
+'git-blame' [-c] [-l] [-t] [-f] [-n] [-p] [-L n,m] [-S <revs-file>]
+ [-M] [-C] [-C] [--since=<date>] [<rev>] [--] <file>
DESCRIPTION
-----------
Annotates each line in the given file with information from the revision which
last modified the line. Optionally, start annotating from the given revision.
+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 gitlink:git-diff[1] or the "pickaxe"
interface briefly mentioned in the following paragraph.
-c, --compatibility::
Use the same output mode as gitlink:git-annotate[1] (Default: off).
+-L n,m::
+ Annotate only the specified line range (lines count from
+ 1). The range can be specified with a regexp. For
+ example, `-L '/^sub esc_html /,/^}$/'` limits the
+ annotation only to the body of `esc_html` subroutine.
+
-l, --long::
Show long rev (Default: off).
-p, --porcelain::
Show in a format designed for machine consumption.
+-M::
+ Detect moving lines in the file as well. When a commit
+ moves a block of lines in a file (e.g. the original file
+ has A and then B, and the commit changes it to B and
+ then A), traditional 'blame' algorithm typically blames
+ the lines that were moved up (i.e. B) to the parent and
+ assigns blame to the lines that were moved down (i.e. A)
+ to the child commit. With this option, both groups of
+ lines are blamed on the parent.
+
+-C::
+ In addition to `-M`, detect lines copied from other
+ files that were modified in the same commit. This is
+ useful when you reorganize your program and move code
+ around across files. When this option is given twice,
+ the command looks for copies from all other files in the
+ parent for the commit that creates the file in addition.
+
-h, --help::
Show help message.
header, prefixed by a TAB. This is to allow adding more
header elements later.
+
+SPECIFIYING RANGES
+------------------
+
+Unlike `git-blame` and `git-annotate` in older git, the extent
+of annotation can be limited to both line ranges and revision
+ranges. When you are interested in finding the origin for
+ll. 40-60 for file `foo`, you can use `-L` option like this:
+
+ git blame -L 40,60 foo
+
+When you are not interested in changes older than the version
+v2.6.18, or changes older than 3 weeks, you can use revision
+range specifiers similar to `git-rev-list`:
+
+ git blame v2.6.18.. -- foo
+ git blame --since=3.weeks -- foo
+
+When revision range specifiers are used to limit the annotation,
+lines that have not changed since the range boundary (either the
+commit v2.6.18 or the most recent commit that is more than 3
+weeks old in the above example) are blamed for that range
+boundary commit.
+
+A particularly useful way is to see if an added file have lines
+created by copy-and-paste from existing files. Sometimes this
+indicates that the developer was being sloppy and did not
+refactor the code properly. You can first find the commit that
+introduced the file with:
+
+ git log --diff-filter=A --pretty=short -- foo
+
+and then annotate the change between the commit and its
+parents, using `commit{caret}!` notation:
+
+ git blame -C -C -f $commit^! -- foo
+
+
SEE ALSO
--------
gitlink:git-annotate[1]
AUTHOR
------
-Written by Fredrik Kuivinen <freku045@student.liu.se>.
+Written by Junio C Hamano <junkio@cox.net>
GIT
---
+++ /dev/null
-git-pickaxe(1)
-==============
-
-NAME
-----
-git-pickaxe - Show what revision and author last modified each line of a file
-
-SYNOPSIS
---------
-[verse]
-'git-pickaxe' [-c] [-l] [-t] [-f] [-n] [-p] [-L n,m] [-S <revs-file>]
- [-M] [-C] [-C] [--since=<date>] [<rev>] [--] <file>
-
-DESCRIPTION
------------
-
-Annotates each line in the given file with information from the revision which
-last modified the line. Optionally, start annotating from the given revision.
-
-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 gitlink: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
------------------------------------------------------------------------------
-
-OPTIONS
--------
--c, --compatibility::
- Use the same output mode as gitlink:git-annotate[1] (Default: off).
-
--L n,m::
- Annotate only the specified line range (lines count from 1).
-
--l, --long::
- Show long rev (Default: off).
-
--t, --time::
- Show raw timestamp (Default: off).
-
--S, --rev-file <revs-file>::
- Use revs from revs-file instead of calling gitlink:git-rev-list[1].
-
--f, --show-name::
- Show filename in the original commit. By default
- filename is shown if there is any line that came from a
- file with different name, due to rename detection.
-
--n, --show-number::
- Show line number in the original commit (Default: off).
-
--p, --porcelain::
- Show in a format designed for machine consumption.
-
--M::
- Detect moving lines in the file as well. When a commit
- moves a block of lines in a file (e.g. the original file
- has A and then B, and the commit changes it to B and
- then A), traditional 'blame' algorithm typically blames
- the lines that were moved up (i.e. B) to the parent and
- assigns blame to the lines that were moved down (i.e. A)
- to the child commit. With this option, both groups of
- lines are blamed on the parent.
-
--C::
- In addition to `-M`, detect lines copied from other
- files that were modified in the same commit. This is
- useful when you reorganize your program and move code
- around across files. When this option is given twice,
- the command looks for copies from all other files in the
- parent for the commit that creates the file in addition.
-
--h, --help::
- Show help message.
-
-
-THE PORCELAIN FORMAT
---------------------
-
-In this format, each line is output after a header; the
-header at the minumum has the first line which has:
-
-- 40-byte SHA-1 of the commit the line is attributed to;
-- the line number of the line in the original file;
-- the line number of the line in the final file;
-- on a line that starts a group of line from a different
- commit than the previous one, the number of lines in this
- group. On subsequent lines this field is absent.
-
-This header line is followed by the following information
-at least once for each commit:
-
-- author name ("author"), email ("author-mail"), time
- ("author-time"), and timezone ("author-tz"); similarly
- for committer.
-- filename in the commit the line is attributed to.
-- the first line of the commit log message ("summary").
-
-The contents of the actual line is output after the above
-header, prefixed by a TAB. This is to allow adding more
-header elements later.
-
-
-SPECIFIYING RANGES
-------------------
-
-Unlike `git-blame` and `git-annotate` in older git, the extent
-of annotation can be limited to both line ranges and revision
-ranges. When you are interested in finding the origin for
-ll. 40-60 for file `foo`, you can use `-L` option like this:
-
- git pickaxe -L 40,60 foo
-
-When you are not interested in changes older than the version
-v2.6.18, or changes older than 3 weeks, you can use revision
-range specifiers similar to `git-rev-list`:
-
- git pickaxe v2.6.18.. -- foo
- git pickaxe --since=3.weeks -- foo
-
-When revision range specifiers are used to limit the annotation,
-lines that have not changed since the range boundary (either the
-commit v2.6.18 or the most recent commit that is more than 3
-weeks old in the above example) are blamed for that range
-boundary commit.
-
-A particularly useful way is to see if an added file have lines
-created by copy-and-paste from existing files. Sometimes this
-indicates that the developer was being sloppy and did not
-refactor the code properly. You can first find the commit that
-introduced the file with:
-
- git log --diff-filter=A --pretty=short -- foo
-
-and then annotate the change between the commit and its
-parents, using `commit{caret}!` notation:
-
- git pickaxe -C -C -f $commit^! -- foo
-
-
-SEE ALSO
---------
-gitlink:git-blame[1]
-
-AUTHOR
-------
-Written by Junio C Hamano <junkio@cox.net>
-
-GIT
----
-Part of the gitlink:git[7] suite
<a href="git-blame.html">git-blame(1)</a>\r
</dt>\r
<dd>\r
-<p>\r
- Blame file lines on commits.\r
-</p>\r
-</dd>\r
-<dt>\r
-<a href="git-pickaxe.html">git-pickaxe(1)</a>\r
-</dt>\r
-<dd>\r
<p>\r
Find out where each line in a file came from.\r
</p>\r
</div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 08-Nov-2006 01:33:31 UTC\r
+Last updated 09-Nov-2006 07:37:41 UTC\r
</div>\r
</div>\r
</body>\r
Annotate file lines with commit info.
gitlink:git-blame[1]::
- Blame file lines on commits.
-
-gitlink:git-pickaxe[1]::
Find out where each line in a file came from.
gitlink:git-check-ref-format[1]::