Skip to content

git-blame ​

显示最后修改文件每一行的修订版本和作者

概要 ​

bash
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 的镐接口的小示例:

bash
$ 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-annotate(1)

Git ​

git(1) 套件的一部分

基于 CC BY-NC-SA 3.0 许可发布