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

Joe*_*oel 8 git

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

理想解决方案
简单的命令就像

git log books.cpp:10
Run Code Online (Sandbox Code Playgroud)

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

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

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

Pet*_*mer 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
Run Code Online (Sandbox Code Playgroud)

将这个小脚本放入您的路径中,如下所示git-linehistory

git linehistory books.cpp 5,15
Run Code Online (Sandbox Code Playgroud)

它将显示该文件每次提交时第 5 行到第 15 行的样子。