查找与文件某个部分相关的git提交

时间:2011-03-03 08:56:09

标签: git

案例
我经常发现自己正盯着一些看起来不正确的旧代码。看起来已经删除了某些内容(例如,它有一个没有任何价值的循环,或者它创建了一个变量但没有使用它),或者某些东西很难理解。在这些情况下,我真的需要查看文件该部分的历史记录。不是所有的文件,只是那个部分或功能。

理想的解决方案

这样的简单命令
git log books.cpp:10

查找文件books.cpp的第10行(可能还有环境)的历史可能要求太多魔术,但你有没有想过如何解决这段历史的想法?

我尝试了什么
我已经尝试使用 blame ,然后在给定的该行提交之前检查提交 - 重复它直到我看够了。但这是非常繁琐的工作。

您是否觉得需要此功能?你有办法实现它吗?分享您的经验!

2 个答案:

答案 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>来浏览逐行更改的历史记录。