git blame 命令用于查看某文件中每一行代码的最后一次修改情况,包括修改者、提交信息等。以下是该命令的参数及其详细说明:

参数细节

  • filename:需要检查的文件名。
  • -f:在原始提交中显示文件名。
  • -e:显示作者的电子邮件地址,而不是作者姓名。
  • -w:在比较子版本和父版本时忽略空白字符。
  • -L start,end:仅显示指定的行范围。例如:git blame -L 1,2 [filename]。
  • --show-stats:在归咎输出的末尾显示额外的统计信息。
  • -l:显示长格式的提交哈希(默认关闭)。
  • -t:显示原始的时间戳(默认关闭)。
  • -reverse:向前遍历历史,而不是向后。
  • -p, --porcelain:输出适合机器消费的格式。
  • -M:检测文件内移动或复制的行。
  • -C:除了 -M,还检测在同一提交中修改的其他文件中移动或复制的行。
  • -h:显示帮助信息。
  • -c:使用与 git-annotate 相同的输出模式(默认关闭)。
  • -n:显示原始提交中的行号(默认关闭)。

42.1 仅显示特定行

可以通过指定行范围来限制输出:

git blame -L <start>,<end>

其中 <start> 和 <end> 可以是:

行号:

git blame -L 10,30 [filename]

正则表达式:

git blame -L /void main/ [filename]
git blame -L 46,/void foo/ [filename]

偏移量(仅适用于 <end>):

git blame -L 108,+30 [filename]
git blame -L 215,-15 [filename]

可以指定多个行范围,允许范围重叠:

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

42.2 查找修改文件的人

显示指定文件每一行的作者和提交信息:

git blame test.c

显示指定文件每一行的作者电子邮件和提交信息:

git blame -e test.c

通过指定范围限制选择的行:

git blame -L 1,10 test.c

42.3 显示最后一次修改某行的提交

运行以下命令:

git blame <file>

这将显示文件,每一行都标注了最后一次修改该行的提交信息。

42.4 忽略仅涉及空白字符的更改

有时仓库中的提交仅调整空白字符,例如修复缩进或切换制表符和空格。这使得找到实际编写代码的提交变得困难。 使用以下命令忽略仅涉及空白字符的更改:

git blame -w <file>

这将帮助你找到某行代码真正来自哪个提交,而不是被空白字符更改的提交。