git 差异 --numstat 与 --name-status

git diff --numstat with --name-status

有什么方法可以将 运行ning git diff --numstatgit diff --name-status 合并为一个 运行 的输出吗?
我的问题是,如果我只使用 --numstat 那么我不知道是否刚刚向文件添加了一些新行或者文件是否是全新的。使用 --name-status 时,我会得到文件是否新的信息,但缺少有关行修改的统计信息。

目前我的解决方法是 运行 分别使用这两个命令,然后通过 PowerShell 脚本合并该输出,但由于存储库相当大,我希望首先获得所需的输出。在此先感谢您的帮助!

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

git log --stat --summary

这是此命令的屏幕截图。每次提交后,您都会获得每个文件和摘要的所有信息。

您可以组合 --numstat--summary 标志;

git diff --numstat --summary

注意"unstaged"区不能有新文件;所以假设您使用了 "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

注意 :您可以将 --numstat--summary 标志与 git diffgit diff --cachedgit show 可能还有其他命令。

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

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