如何按行查看文件的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
相关产品推荐
相关产品推荐

