git - 查找与文件特定部分相关的 git 提交

标签 git

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

理想的解决方案
一个简单的命令,如

git log books.cpp:10

查找文件 books.cpp 第 10 行(可能与周围环境)的历史记录可能太神奇了,但您知道如何计算出该历史记录吗?

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

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

最佳答案

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 行在该文件的每次提交时的样子。

关于git - 查找与文件特定部分相关的 git 提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5178517/

相关文章:

git - 使用Rails推送到github错误

git - 仅添加未跟踪的文件

git - master 中的还原提交,如何在没有还原效果的情况下 pull 下 master?

git - 通过直接从 master pull ,使 git 功能分支与 master 分支保持最新

bash - Git 在 MacOS Catalina : "xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing" 上不工作

git - 是否可以更改 git 上的提交日期?

git - 使浅层 GIT 存储库不那么浅

git - GitHub for Windows 的 "sync"有什么作用?

Git:如何防止本地机器用户名被发布?

git - 在等待它们 merge 到上游时保持 Git 分支是最新的