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

相关推荐
BIBI204928 分钟前
换 Git 托管平台怎么做?基于 TortoiseGit 的跨平台迁移教程
windows·git·tortoisegit·问题解决·版本控制·最佳实践
echome8888 小时前
Git 日常救急:撤销提交、找回误删文件和解决冲突
git·版本控制
赵民勇13 小时前
Git命令详解
git
不老刘1 天前
Antigravity 的 New Worktree 模式:给 AI 代理一个安全的“平行工位”
人工智能·git·ai编程·antigravity
光谱SpectrAI1 天前
Windows 也中招:Git Bash 和 Node 仍信任泄露的 eMudhra 证书
git
YIN_尹1 天前
【git原理与使用】git初识与安装
大数据·git·elasticsearch
Leo_Mr2 天前
Vue3 项目配置 Git 提交规范(企业通用方案:husky + commitlint + cz-git + lint-staged)
git
jyOverQ2 天前
Git rebase 和 merge 有什么区别?什么时候该用哪个?
git
晗夜未央2 天前
跨仓库 Skill 换台电脑就失效?用 Git remote 校验项目
人工智能·git·python
Lsetea2 天前
Git访问HTTPS证书不受信任:用URL级sslCAInfo限定私有CA范围
git·https·开发工具·ssl证书·ca证书