文章目录1. 简介2. 格式3. 选项4. 示例4.1 基本用法4.2 显示指定行范围4.3 显示作者邮箱4.4 忽略空白变更4.5 检测跨文件移动的代码4.6 查看某行何时被删除5. 注意5.1 常见输出格式5.2 git blame vs git log5.3 查看重构前的代码出处5.4 常用别名设置6. 小结参考文献1. 简介git blame用于查看文件中每一行代码的最后修改信息包括修改人、修改时间和对应的提交哈希。简单来说git blame告诉你“这行代码是谁写的、什么时候写的”。典型场景定位 bug 是谁引入的了解某行代码的修改原因代码审查时追溯历史2. 格式gitblame[options]file3. 选项-Lstart,end只显示指定行号范围如-L10,20 -n, --show-number 显示原始提交的行号默认已显示-w忽略空白字符的变更-M|-C|-C-C检测跨文件移动或复制的代码-C级别越高检测越广--reverse反向 blame查看某行何时被删除结合新旧版本使用-e显示作者邮箱而非用户名-s隐藏作者名只显示提交哈希--sincedate只显示指定日期之后的修改4. 示例4.1 基本用法# 查看 main.go 文件的每行修改信息gitblame 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 显示指定行范围# 只显示第 4 到第 6 行gitblame-L4,6main.go4.3 显示作者邮箱# 显示邮箱而非用户名gitblame-emain.go4.4 忽略空白变更# 忽略仅空白字符的修改gitblame-wmain.go4.5 检测跨文件移动的代码# 检测从其他文件复制或移动过来的代码gitblame-Cmain.go4.6 查看某行何时被删除# 使用 reverse 查看文件某行何时被删除gitblame--reverse旧版本..新版本 -- main.go5. 注意5.1 常见输出格式字段说明示例提交哈希最后修改该行的提交 IDa1b2c3d4作者最后修改人张三时间最后修改时间2024-01-15 10:30:00 0800行号原文件中的行号1)代码该行内容package main5.2git blamevsgit log命令粒度用途git blame行级别查看某一行是谁改的git log文件级别查看文件的提交历史5.3 查看重构前的代码出处# 检测从其他文件移动来的代码更彻底gitblame-C-Cmain.go5.4 常用别名设置gitconfig--globalalias.blblame -wgitconfig--globalalias.blameeblame -e# 使用别名gitbl main.gogitblamee main.go6. 小结需求命令说明查看文件每行修改信息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