git count files in the staged index

我试图找出如何轻松地计数文件在我的未提交索引。

我试过了:

git status | grep '#' | wc -l

但是有一些以 #开头的行并不表示已更改的文件。有更好的吗?我想 git status应该有个标志才能这么做。

即使像 GitX 这样的工具也不容易让您选择暂存文件/目录并查看其中有多少。

32167 次浏览

试试 git status -s:

git status -s | egrep "^M" | wc -l

行开始后面的 M(^)表示一个暂存文件。带有空格的 ^ M将是一个非暂存但已更改的文件。

如果你想要一个脚本可以使用的东西:

git diff --cached --numstat | wc -l

If you want something human readable:

git diff --cached --stat

这对我很有效:

git status | grep 'modified:' | wc -l

它会返回一个数字

不管怎样,我更喜欢:

git diff --stat | tail -n1

输出类似于:

10 files changed, 74 insertions(+), 123 deletions(-)

也许9年前还没有,但是到了2019年,ls-filesdiff --stat快得多:

git ls-files --cached | wc -l

Below should cover for all cases (new, modified, deleted and even untracked), it returns a number.

(git status -s |select-string -Pattern "^\s*[A|\?|D|M]" -AllMatches).Matches.Count

对于那些寻找 PowerShell 解决方案的人来说:

(git diff --cached --numstat | Measure-Object -Line).Lines

这有很多答案... ... 但是最好的命令 imo (它不需要任何管道,而且是纯本地 git 命令)如下所示。请注意,这包括删除、修改和添加的文件:

git diff --cached --shortstat

输出只有一行:

X files changed, Y insertions(+), Z deletions(-)

如果没有进行任何更改,则不打印任何内容(甚至不打印新的空行)。

It's also obvious how to get the same result for unstaged changes (just omit the --cached flag):

git diff --shortstat