git-blame
显示最后修改文件每一行的修订版本和作者
概要
git blame [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental]
[-L <range>] [-S <revs-file>] [-M] [-C] [-C] [-C] [--since=<date>]
[--ignore-rev <rev>] [--ignore-revs-file <file>]
[--color-lines] [--color-by-age] [--progress] [--abbrev=<n>]
[ --contents <file> ] [<rev> | --reverse <rev>..<rev>] [--] <file>描述
使用最后修改该行的修订版本的信息标注给定文件中的每一行。可选择从给定修订版本开始标注。
当指定一次或多次时,-L 将标注限制为请求的行。
行的来源会自动跟踪整个文件重命名(目前没有选项可以关闭重命名跟踪)。要跟踪从一个文件移动到另一个文件的行,或跟踪从另一个文件复制粘贴的行等,请参阅 -C 和 -M 选项。
报告不会告诉你任何关于已删除或替换的行的信息;你需要使用 git diff 或以下段落中简要提到的"镐"接口等工具。
除了支持文件标注外,Git 还支持搜索开发历史以查找代码片段何时出现在更改中。这使得可以跟踪代码片段何时被添加到文件、在文件之间移动或复制,以及最终删除或替换。它通过在差异中搜索文本来工作。以下是搜索 blame_usage 的镐接口的小示例:
$ git log --pretty=oneline -S'blame_usage'
5040f17eba15504bad66b14a645bddd9b015ebb7 blame -S <ancestry-file>
ea4c7f9bf69e781dd0cd88d2bccb2bf5cc15c9a7 git-blame: Make the output选项
-b
为边界提交显示空白 SHA-1。这也可以通过 blame.blankBoundary 配置选项控制。
--root
不将根提交视为边界。这也可以通过 blame.showRoot 配置选项控制。
--show-stats
在 blame 输出末尾包含额外的统计信息。
-L <start>,<end>, -L :<funcname>
仅标注由 <start>,<end> 或函数名正则表达式 <funcname> 给出的行范围。可以多次指定。允许重叠范围。
-l
显示长修订版本(默认:关闭)。
-t
显示原始时间戳(默认:关闭)。
-S <revs-file>
使用 <revs-file> 中的修订版本而不是调用 git-rev-list(1)。
--reverse <start>..<end>
向前遍历历史而不是向后。不是显示行出现的修订版本,而是显示行最后存在的修订版本。
--first-parent
在看到合并提交时仅跟随第一个父提交。
-p, --porcelain
以机器消费的格式显示。
--line-porcelain
显示 porcelain 格式,但为每一行输出提交信息。隐含 --porcelain。
--incremental
以机器消费的格式增量显示结果。
--encoding=<encoding>
指定用于输出作者名称和提交摘要的编码。
--contents <file>
使用 <file> 的内容进行标注。
--date <format>
指定用于输出日期的格式。
--progress, --no-progress
启用进度报告。
-M[<num>]
检测文件内移动或复制的行。
-C[<num>]
检测从其他文件移动或复制的行。
--ignore-rev <rev>
在分配 blame 时忽略修订版本所做的更改。
--ignore-revs-file <file>
忽略 <file> 中列出的修订版本。
--color-lines
如果行注释来自与前一行相同的提交,则以不同颜色显示。
--color-by-age
根据行的存在时间对行注释着色。
-h
显示帮助消息。
-c
使用与 git-annotate(1) 相同的输出模式(默认:关闭)。
--score-debug
包含与文件间行移动(参见 -C)和文件内行移动(参见 -M)相关的调试信息。
-f, --show-name
显示原始提交中的文件名。
-n, --show-number
显示原始提交中的行号(默认:关闭)。
-s
从输出中抑制作者名称和时间戳。
-e, --show-email
显示作者电子邮件而不是作者名称(默认:关闭)。
-w
在比较父版本和子版本以查找行来源时忽略空白。
--diff-algorithm=(patience|minimal|histogram|myers)
选择差异算法。
--abbrev=<n>
使用 <n> 位数字的缩写对象名称。
默认格式
当未指定 --porcelain 或 --incremental 选项时,git blame 将为每一行输出标注,包括:提交的缩写对象名称、作者标识(默认为作者名称和日期,除非指定 -s 或 -e)以及行号。
porcelain 格式
在此格式中,每一行在头部之后输出;头部至少有第一行,包含:提交的 40 字节 SHA-1、原始文件中的行号、最终文件中的行号、在从不同提交开始的行组上该组中的行数。
指定范围
与旧版本 git 中的 git blame 和 git annotate 不同,标注的范围可以限制为行范围和修订范围。限制标注为行范围的 -L 选项可以多次指定。
增量输出
当使用 --incremental 选项调用时,命令在构建时输出结果。输出通常首先讨论最近提交触及的行(即行将被乱序标注),旨在供交互式查看器使用。
映射作者
请参阅 gitmailmap(5)。
配置
blame.blankBoundary
在 git-blame(1) 中为边界提交显示空白提交对象名称。此选项默认为 false。
blame.coloring
这决定应用于 blame 输出的配色方案。可以是 'repeatedLines'、'highlightRecent' 或 'none'(默认)。
blame.date
指定在 git-blame(1) 中用于输出日期的格式。如果未设置则使用 iso 格式。
blame.showEmail
在 git-blame(1) 中显示作者电子邮件而不是作者名称。此选项默认为 false。
blame.showRoot
在 git-blame(1) 中不将根提交视为边界。此选项默认为 false。
blame.ignoreRevsFile
忽略文件中列出的修订版本,每行一个未缩写的对象名称。空白和以 # 开头的注释被忽略。
blame.markUnblamableLines
在 git-blame(1) 的输出中用 '*' 标记被忽略修订版本更改但我们无法归因于另一个提交的行。
blame.markIgnoredLines
在 git-blame(1) 的输出中用 '?' 标记被忽略修订版本更改但我们归因于另一个提交的行。
另请参阅
Git
git(1) 套件的一部分
