git blame

文章目录

  • [1. 简介](#1. 简介)
  • [2. 格式](#2. 格式)
  • [3. 选项](#3. 选项)
  • [4. 示例](#4. 示例)
    • [4.1 基本用法](#4.1 基本用法)
    • [4.2 显示指定行范围](#4.2 显示指定行范围)
    • [4.3 显示作者邮箱](#4.3 显示作者邮箱)
    • [4.4 忽略空白变更](#4.4 忽略空白变更)
    • [4.5 检测跨文件移动的代码](#4.5 检测跨文件移动的代码)
    • [4.6 查看某行何时被删除](#4.6 查看某行何时被删除)
  • [5. 注意](#5. 注意)
    • [5.1 常见输出格式](#5.1 常见输出格式)
    • [5.2 `git blame` vs `git log`](#5.2 git blame vs git log)
    • [5.3 查看重构前的代码出处](#5.3 查看重构前的代码出处)
    • [5.4 常用别名设置](#5.4 常用别名设置)
  • [6. 小结](#6. 小结)
  • 参考文献

1. 简介

git blame 用于查看文件中每一行代码的最后修改信息,包括修改人、修改时间和对应的提交哈希。

简单来说:git blame 告诉你"这行代码是谁写的、什么时候写的"。

典型场景:

  • 定位 bug 是谁引入的
  • 了解某行代码的修改原因
  • 代码审查时追溯历史

注意: git blame 显示的修改时间是提交者执行 git commit 时的时间,而不是实际编辑代码的时间。

2. 格式

bash 复制代码
git blame [<options>] [--] <file>

3. 选项

bash 复制代码
-L <start>,<end>
  只显示指定行号范围(如 `-L 10,20`)

-n, --show-number
  显示原始提交的行号(默认已显示)

-w
  忽略空白字符的变更

-M | -C | -C -C
  检测跨文件移动或复制的代码(`-C` 级别越高检测越广)

--reverse
  反向 blame,查看某行何时被删除(结合新旧版本使用)

-e
  显示作者邮箱而非用户名

-s
  隐藏作者名(只显示提交哈希)

--since <date>
  只显示指定日期之后的修改

4. 示例

4.1 基本用法

bash 复制代码
# 查看 main.go 文件的每行修改信息
git blame main.go

输出示例:

复制代码
a1b2c3d4 (张三 2024-01-15 10:30:00 +0800 1) package main
e5f6g7h8 (李四 2024-02-20 14:20:00 +0800 2) import "fmt"
a1b2c3d4 (张三 2024-01-15 10:30:00 +0800 3) 
i9j0k1l2 (王五 2024-03-10 09:00:00 +0800 4) func main() {
e5f6g7h8 (李四 2024-02-20 14:20:00 +0800 5)     fmt.Println("hello")
a1b2c3d4 (张三 2024-01-15 10:30:00 +0800 6) }

4.2 显示指定行范围

bash 复制代码
# 只显示第 4 到第 6 行
git blame -L 4,6 main.go

4.3 显示作者邮箱

bash 复制代码
# 显示邮箱而非用户名
git blame -e main.go

4.4 忽略空白变更

bash 复制代码
# 忽略仅空白字符的修改
git blame -w main.go

4.5 检测跨文件移动的代码

bash 复制代码
# 检测从其他文件复制或移动过来的代码
git blame -C main.go

4.6 查看某行何时被删除

bash 复制代码
# 使用 reverse 查看文件某行何时被删除
git blame --reverse 旧版本..新版本 -- main.go

5. 注意

5.1 常见输出格式

字段 说明 示例
提交哈希 最后修改该行的提交 ID a1b2c3d4
作者 最后修改人 张三
时间 最后修改时间 2024-01-15 10:30:00 +0800
行号 原文件中的行号 1)
代码 该行内容 package main

5.2 git blame vs git log

命令 粒度 用途
git blame 行级别 查看某一行是谁改的
git log 文件级别 查看文件的提交历史

5.3 查看重构前的代码出处

bash 复制代码
# 检测从其他文件移动来的代码(更彻底)
git blame -C -C main.go

5.4 常用别名设置

bash 复制代码
git config --global alias.bl "blame -w"
git config --global alias.blamee "blame -e"

# 使用别名
git bl main.go
git blamee main.go

6. 小结

需求 命令 说明
查看文件每行修改信息 git blame <file> 最常用,显示作者、时间、提交
显示指定行范围 git blame -L 10,20 <file> 只查看感兴趣的行
忽略空白变更 git blame -w <file> 避免被格式化干扰
显示作者邮箱 git blame -e <file> 方便邮件联系
检测跨文件移动 git blame -C <file> 追溯重构后代码的来源

一句话总结git blame 是代码追溯的"侦探工具",帮你快速定位每一行代码的"最后修改人"和"修改原因"。


参考文献

Git - git-blame Documentation

相关推荐
yeflx1 小时前
Git操作
git
恋喵大鲤鱼1 小时前
git pull
git·git pull
咖啡星人k3 小时前
MonkeyCode 的 Git 集成:AI编程如何与版本控制无缝协作
git·ai编程·monkeycode
恋喵大鲤鱼4 小时前
git remote
git·git remote
恋喵大鲤鱼5 小时前
git cherry-pick
git·git cherry-pick
恋喵大鲤鱼5 小时前
git push
git·git push
stevenzqzq6 小时前
androidstudio 上配置git
git
向日葵.7 小时前
linux & qnx & git 命令 2
linux·运维·git
恋喵大鲤鱼7 小时前
git log
git·git log