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 blamegit 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 许可发布