git diff --numstat与--name-status的区别

6
有没有一种方法可以在一次运行中获取运行git diff --numstatgit diff --name-status的输出组合?我的问题是,如果我只使用--numstat,那么我不知道文件是否仅新增了一些新行,还是完全是新文件。当使用--name-status时,我可以获得文件是否为新文件的信息,但缺少关于行修改的统计数据。

目前我的解决方法是分别运行这两个命令,然后通过PowerShell脚本将其合并,但由于存储库相当大,因此我希望一开始就获得所需的输出。感谢您提前的帮助!

3个回答

3

你可以结合使用--numstat--summary标志;

git diff --numstat --summary

请注意,新文件不能在“未暂存”区域中。假设您使用了“git add”和“git rm”,那么您的git状态将如下所示:
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   b
#       deleted:    a

然后使用

git diff --cached --numstat --summary

将为你提供:

540  0   b
0    3   a
 create mode 100644 b
 delete mode 100644 a

注意:你可以在使用git diffgit diff --cachedgit show和可能其他命令时,结合使用--numstat--summary标志。


我认为在--summary与--numstat一起使用似乎是可行的,但老实说,我希望能够以单行方式获取每个文件的数据(或者完全指定自定义格式),这样输出格式就不会改变,解析脚本也会更简单 :) - DAXaholic

0

您可以使用一些不同的标志来实现它:

git log --stat --summary

这是该命令的屏幕截图。您可以在每个提交后获得每个文件和摘要的所有信息。

enter image description here


谢谢,但我认为这对于两个单独的提交不起作用,而且我仍然无法确定一个文件是添加还是只有插入。 - DAXaholic

0

您可以使用--diff-filter=A选项仅获取新文件,使用--diff-filter=a获取其他更改:

git diff --numstat --diff-filter=A
git diff --numstat --diff-filter=a

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