You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按行查看文件的GitHub提交历史记录

按行查看文件的Git提交历史需求

我在提交“aaaaa”时添加了该文件,在提交“abcde”时修改了部分行,又在提交“qwert”时修改了部分行。
其中“qwert”中的部分修改其实在“abcde”中已存在,但因为“qwert”是最新修改提交,所以显示的是它。
我查阅了git log的文档,git log会展示每个提交的变更,但我认为仅靠单个命令无法实现需求,不知道该如何操作。
请问通过命令行、shell脚本或其他程序,如何实现按行查看文件的GitHub提交历史?


解决方案

1. 基础按行查看:git blame

直接使用git blame命令即可按行展示文件的提交历史,每行默认显示最后修改它的提交哈希、作者、提交时间及行内容:

git blame <目标文件名>

若需要更详细信息,可添加参数:

  • -l:显示完整的提交哈希
  • -t:显示原始时间戳
  • -n:强制显示行号
    组合使用示例:
git blame -l -t -n <目标文件名>

2. 追踪特定行的完整变更历史

如果需要查看某一行(或多行)从创建到当前的所有修改记录,使用git log配合-L参数指定行范围:

git log -L <起始行号>,<结束行号>:<目标文件名>

例如查看第3到第8行的历史:

git log -L 3,8:example.txt

该命令会列出所有修改过指定行的提交,同时展示每个提交中对应行的具体变更内容。

3. 识别重复/移动的代码修改

针对你提到的“后续提交中存在已在旧提交里出现的修改”情况,可添加-C参数让git blame追踪代码的移动或复制来源,显示原始提交信息:

git blame -C <目标文件名>

4. 自定义格式的Shell脚本(可选)

如果需要自定义输出格式或批量处理,可使用以下简单脚本:

#!/bin/bash
TARGET_FILE=$1

if [ -z "$TARGET_FILE" ]; then
    echo "请指定目标文件名"
    exit 1
fi

echo "=== 文件 $TARGET_FILE 按行提交历史 ==="
git blame $TARGET_FILE | while read -r line; do
    commit_hash=$(echo "$line" | awk '{print $1}')
    author=$(echo "$line" | awk '{print $2" "$3}')
    line_content=$(echo "$line" | cut -d' ' -f5-)
    echo "提交哈希: $commit_hash | 作者: $author | 内容: $line_content"
done

保存为git-line-history.sh,赋予执行权限后运行:

chmod +x git-line-history.sh
./git-line-history.sh <目标文件名>

内容的提问来源于stack exchange,提问作者Giuk Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:21:12