首页 > 解决方案 > 带有忽略空间的 git diff --name-only 似乎已损坏

问题描述

我有一个存储库,其中有许多文件只有 EOL 空白更改,但有些文件有实际更改。我正在尝试制作一个别名来仅打开 vim 选项卡中具有实际更改的文件的差异,作为其中的一部分,我正在运行一个git diff --name-only ...命令来获取已更改的文件列表,以便我可以在选项卡中打开它们。

我的问题是--ignore-space-at-eol,--ignore-space-change和.--ignore-all-space结合起来似乎什么也不做--name-only

当我运行以下命令时,什么都没有打印出来(my_file有一个 CR/LF 更改):

git diff --ignore-space-at-eol my_file

但是当我运行它时,我会my_file打印出来:

git diff --ignore-space-at-eol --name-only my_file

有没有办法只获取没有空格更改的文件的名称?这对我来说似乎是一个错误,但我无法找到类似的问题。

我在 git 版本 2.25.0

标签: gitdiffspaceignore

解决方案


我最近碰巧偶然发现了一个类似的问题,并且还发现使用该--name-only选项不适用于--ignore-all-spaceor --ignore-blank-lines

正如评论中的某人指出的那样,这是由于--name-only仅检查文件是否已更改而不计算实际更改。我发现您可以改用该--stat选项,因为这将计算文件的实际更改。

因此,要在忽略空格更改的同时获取已更改的文件列表,您可以使用以下内容:

git diff --stat --ignore-all-space --ignore-blank-lines --diff-filter=M <branchname>


推荐阅读