git count阶段索引中的文件

Bra*_*ley 51 git

我正在试图弄清楚如何轻松计算未提交索引中的文件.

我试过了:

git status | grep '#' | wc -l
Run Code Online (Sandbox Code Playgroud)

但是有一些行开头#不代表更改的文件.谁有更好的东西?想象必须要有一个标志git status来做到这一点.

即使像GitX这样的工具也不容易让你选择分阶段的文件/目录,看看它们有多少.

mka*_*sek 65

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

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

如果你想要人类可读的东西:

git diff --cached --stat

  • @Humdinger问题是关于索引中未提交的文件,这是`--cached`显示的内容.如果没有`--cached`,它将显示在工作目录中而不是索引(即未分段文件)中更改的文件. (3认同)
  • 为什么使用--cached标志? (2认同)

chr*_*lee 21

这对我有用:

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

它返回一个数字

  • 这个数字是"1" (2认同)
  • 这不适用于新添加的文件。 (2认同)

fwi*_*wiw 13

对于它的价值,我更喜欢:

git diff --stat | tail -n1
Run Code Online (Sandbox Code Playgroud)

输出类似于:

10 files changed, 74 insertions(+), 123 deletions(-)
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,您可以使用 [`--shortstat`](https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---shortstat) 以便“*仅输出最后一个--stat 格式的行,包含修改的文件总数以及添加和删除的行数。*”(而不是 `stat` + `tail`) (4认同)

小智 10

试试git status -s:

git status -s | egrep "^M" | wc -l
Run Code Online (Sandbox Code Playgroud)

M在start-of-line(^)之后直接表示分阶段文件.^ M,带有空格,将是一个未分级但已更改的文件.

  • 对我来说,最简单,最好的方法。您还应该考虑添加`| -grep -v'^ ??'`过滤未暂存的文件 (2认同)

ele*_*vir 7

这有很多答案......但在我看来最好的命令(它不需要任何管道并且是纯本地 git 命令)如下。请注意,这会计算已删除、修改和添加的文件:

git diff --cached --shortstat
Run Code Online (Sandbox Code Playgroud)

输出只有一行:

X files changed, Y insertions(+), Z deletions(-)
Run Code Online (Sandbox Code Playgroud)

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

如何为未暂存的更改获得相同的结果也很明显(只需省略该--cached标志):

X files changed, Y insertions(+), Z deletions(-)
Run Code Online (Sandbox Code Playgroud)