Git 查找仅更改空白的提交

Git 查找仅更改空白的提交,git,Git,如何在git分支中找到所有更改仅修改空白的提交?我不关心合并提交 更一般地说,根据git提交的不同方面,找到git提交的最佳方法是什么。我知道git log-S,但这只适用于非常简单的情况(当您想在差异中查找文本时) git log-G可用于搜索其差异包含与正则表达式匹配的行的提交 请注意,这不同于说git log-S--pickaxe regex,因为这将只显示其差异改变匹配字符串出现次数的提交。换句话说,匹配字符串必须出现在给定文件的添加行或删除行中,但不能同时出现在这两行中 在您的情况下,

如何在git分支中找到所有更改仅修改空白的提交?我不关心合并提交

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

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

请注意,这不同于说
git log-S--pickaxe regex
,因为这将只显示其差异改变匹配字符串出现次数的提交。换句话说,匹配字符串必须出现在给定文件的添加行或删除行中,但不能同时出现在这两行中

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

git log -G"^\s+$" --no-merges
其中,
^\s+$
匹配差异中的任何一行,该行只不过是空白


缺点是,这还包括提交,其差异除了仅包含空格的行之外,还包含其他行。

类似的操作应该可以

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版本列表--无合并$分支);做
如果[-z“$(git diff-b$commit^..$commit)”;然后
echo“$commit仅修改空白。”
fi
完成

虽然速度很慢,但似乎可以工作。我会将
--no merges
添加到
git rev list
中,以不显示合并提交。您可能希望通过管道将
git diff
输出导入例如
head-n1
中,这样它就不会只尝试计算完整的diff。这可能会将其速度提高一小部分。我正在试验
git diff tree--quiet--忽略空间更改$commit
作为
if
-条件。这要快得多,但由于某些原因,它似乎给出了错误的结果。