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

仅将名称与Git中的其他参数一起使用,git,count,diff,Git,Count,Diff,我最近对一个包含90%空白更改的分支进行了一些更改。现在我想计算一下有多少文件收到了其他10%的更改。是否有一种方法可以在传递其他参数(如--忽略空行)的同时git diffgit diff——仅限名称——忽略空行返回所有已更改文件的完整列表,而不是筛选列表。如果我省略了--name only,那么diff会显示我想要的确切更改,但我想要的只是文件列表,我不关心更改本身 谢谢 不幸的是,--name only和--name status都使用快捷方式:它们比较存储的树(名称和哈希ID),而不查看

我最近对一个包含90%空白更改的分支进行了一些更改。现在我想计算一下有多少文件收到了其他10%的更改。是否有一种方法可以在传递其他参数(如
--忽略空行)的同时
git diff
git diff——仅限名称——忽略空行
返回所有已更改文件的完整列表,而不是筛选列表。如果我省略了
--name only
,那么diff会显示我想要的确切更改,但我想要的只是文件列表,我不关心更改本身


谢谢

不幸的是,
--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
稍加按摩(和/或使用
--no prefix
)只会得到文件名,而没有
A/
b/
前缀:

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


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

不幸的是,
--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
稍加按摩(和/或使用
--no prefix
)只会得到文件名,而没有
A/
b/
前缀:

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


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

所有空格更改是否都与空行相关?否则,
--ignore all space
可能更相关。这更像是一个示例,但交换
ignore all space
仍然存在同样的问题。所有空格更改是否都与空行相关?否则,
--忽略所有空格
可能更相关。这意味着更多的是一个示例,但交换
忽略所有空格
仍然存在同样的问题。