案例
我经常发现自己正盯着一些看起来不正确的旧代码。看起来已经删除了某些内容(例如,它有一个没有任何价值的循环,或者它创建了一个变量但没有使用它),或者某些东西很难理解。在这些情况下,我真的需要查看文件该部分的历史记录。不是所有的文件,只是那个部分或功能。
理想的解决方案
像
git log books.cpp:10
查找文件books.cpp的第10行(可能还有环境)的历史可能要求太多魔术,但你有没有想过如何解决这段历史的想法?
我尝试了什么
我已经尝试使用 blame ,然后在给定的该行提交之前检查提交 - 重复它直到我看够了。但这是非常繁琐的工作。
您是否觉得需要此功能?你有办法实现它吗?分享您的经验!
答案 0 :(得分:4)
Git很容易扩展。这样的事情能实现你想要的吗?
#!/bin/bash
FILENAME=$1
LINENUMBERS=$2
for hash in `git log --pretty=format:%h ${FILENAME}`
do
echo "***************** Showing ${FILENAME} at ${hash}"
git blame -L ${LINENUMBERS} ${hash} ${FILENAME}
done
将此小脚本放在您的路径中,如git-linehistory
,并将其称为:
git linehistory books.cpp 5,15
它将向您显示该文件的每次提交时第5行到第15行的内容。
答案 1 :(得分:2)
git blame -L
选项允许您指定要输出的行范围,甚至是正则表达式以匹配您想要的功能。简而言之,您可以连续拨打git blame -L range <commit> <file-name>
来浏览逐行更改的历史记录。