git blame 是 Git 里用来逐行追溯代码修改历史的命令,核心作用是:查看文件里每一行代码,最后是被谁、在哪个提交、什么时候修改的

一、字面意思

  • blame 本义:责备、归咎于
  • 在 Git 里是中性工具义:“这行代码最后一次修改,归属于哪个提交/开发者”
  • 别名:git annotate(含义完全一样)

二、作用与输出

执行:

git blame 文件名

典型输出格式:

a1b2c3d (张三  2026-01-15 10:30 +0800  1)  #include <stdio.h>
d4e5f6g (李四  2026-02-20 14:15 +0800  2)  int main() {
a1b2c3d (张三  2026-01-15 10:30 +0800  3)      printf("hello\n");
d4e5f6g (李四  2026-02-20 14:15 +0800  4)      return 0;
d4e5f6g (李四  2026-02-20 14:15 +0800  5)  }

每列含义:

  1. 短提交哈希(a1b2c3d)
  2. 作者(张三)
  3. 修改时间
  4. 行号
  5. 代码内容

三、常用场景

  • 线上出 bug,想知道谁最后改了这行
  • 看不懂某段代码,找原作者咨询
  • 代码 review:确认每行的修改来源与责任
  • 重构时:了解代码的历史变迁

四、常用选项

  • 只看某几行:
    git blame -L 10,20 文件名  # 只看第10~20行
    
  • 忽略空格/换行变化(只看实质性代码修改):
    git blame -w 文件名
    
  • 显示作者邮箱:
    git blame -e 文件名
    

五、容易混淆

  • git blame行级、空间上看“最后一次修改是谁”
  • git log提交级、时间上看“整个项目/文件的提交历史”

简单记:blame = 查行 → 谁改的;log = 查提交 → 改了什么