在 Git 中将仅名称与其他参数一起使用

Using name-only with other parameters in Git

我最近对一个包含 90% 空白更改的分支进行了一些更改。现在我想计算一下有多少文件收到了另外 10% 的更改。有没有办法在 git diff 的同时传递其他参数,例如 --ignore-blank-linesgit diff --name-only --ignore-blank-lines returns 所有更改文件的完整列表,而不是筛选列表。如果我省略 --name-only 那么 diff 会显示我想要的确切更改,但我想要的只是文件的 list,我不关心更改本身。

谢谢!

不幸的是,--name-only--name-status 使用快捷方式:他们比较存储的 (名称和哈希 ID)而不查看 文件内容.1

您需要做的是将 git diff(或 git show)与空白选项一起使用,然后去掉除文件名以外的所有内容。例如:

$ git show | grep '^diff '
diff --git a/file1 b/file1
diff --git a/file2 b/file2
$ git show --ignore-blank-lines | grep '^diff '
diff --git a/file2 b/file2

多一点按摩(and/or 使用 --no-prefix)将为您提供没有 a/b/ 前缀的文件名:

$ git show --ignore-blank-lines --no-prefix | grep '^diff '
diff --git file2 file2

1如果启用重命名检测,检测器检查每个文件的内容。但是,它不使用空格选项,所以这根本不会影响结果。 --name-status 算法的其余部分继续只使用存储的散列。