查找仅更改空格的提交

4

如何查找 Git 分支中所有仅修改空格的提交?我不关心合并提交。

更一般地说,基于差异方面查找 Git 提交的最佳方法是什么?我知道 git log -S,但这仅适用于非常简单的情况(当您想在差异中查找文本时)。

2个回答

2

应该做类似这样的事情

branch=<branch you wish to check>
for commit in $(git rev-list --no-merges $branch); do
    if [ -z "$(git diff -b $commit^..$commit)" ]; then
        echo "$commit only modifies whitespace."
    fi
done

它运行得相当慢,但似乎是有效的。我会在git rev-list中添加--no-merges以不显示合并提交。 - asmeurer
你可能想将 git diff 的输出导入到 head -n 1 中,这样它就不会尝试计算完整的差异。这可能会稍微加快速度。 - nneonneo
我正在尝试将 git diff-tree --quiet --ignore-space-change $commit 作为 if 条件来进行实验。这种方法要快得多,但是由于某些原因似乎会给出错误的结果。 - sschuberth

0

git log -G<正则表达式> 可用于搜索包含与正则表达式匹配的行的提交的差异。

请注意,这与说 git log -S<正则表达式> --pickaxe-regex 不同,因为它只会显示其差异更改了匹配字符串出现次数的提交。换句话说,匹配字符串必须出现在给定文件中的添加或删除行中的一个,但不能同时出现在两者中间。

在您的情况下,您可以执行类似以下操作:

git log -G"^\s+$" --no-merges

^\s+$ 匹配差异中任何只包含空格的行。

缺点是这也会包括提交的差异中除了只有空格的行之外的其他行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接