我正在尝试找出如何轻松计算未提交索引中的文件数量。
我已经尝试过:
git status | grep '#' | wc -l
但有一些以#
开头的行并不代表被修改的文件。有更好的方法吗?猜想git status
一定有标志可以做到这一点。
即使像GitX这样的工具也不容易让你选择暂存的文件/目录并查看其中有多少个。
我正在尝试找出如何轻松计算未提交索引中的文件数量。
我已经尝试过:
git status | grep '#' | wc -l
但有一些以#
开头的行并不代表被修改的文件。有更好的方法吗?猜想git status
一定有标志可以做到这一点。
即使像GitX这样的工具也不容易让你选择暂存的文件/目录并查看其中有多少个。
如果你想要一个脚本可以使用的东西:
git diff --cached --numstat | wc -l
如果你想要一些人类可读的东西:
git diff --cached --stat
这对我有用:
git status | grep 'modified:' | wc -l
它返回一个数字。
就我个人而言,我更喜欢:
git diff --stat | tail -n1
输出结果如下:
10 files changed, 74 insertions(+), 123 deletions(-)
--shortstat
来代替stat
+ tail
,以"仅输出 --stat 格式的最后一行,包含修改文件的总数、添加行数和删除行数。"的信息。请注意,不要改变原文意思,保持通顺易懂。 - KyleMitgit status -s | egrep "^M " | wc -l
运行成功了。我认为正则表达式中的空格需要在"M"的另一侧。 - Bradleygit status -s | egrep -c "^[MARCD]"
- Bradley| -grep -v '^??'
来过滤未暂存的文件。 - cgdave有很多答案可以选择,但是在我的看法中最好的命令是以下的纯本地git命令,它不需要任何管道操作。注意,这将统计已删除、修改和添加的文件:
git diff --cached --shortstat
X files changed, Y insertions(+), Z deletions(-)
--cached
标志即可)。git diff --shortstat
(git status -s |select-string -Pattern "^\s*[A|\?|D|M]" -AllMatches).Matches.Count
ls-files
比 diff --stat
更快:git ls-files --cached | wc -l
git status
,零个未提交的更改,但是它显示我已更改了数千个文件。 - derpedy-doo对于任何寻找PowerShell解决方案的人:
(git diff --cached --numstat | Measure-Object -Line).Lines
git --no-pager diff --shortstat <master>
--cached
显示的内容。如果没有--cached
,它会显示已更改但不在索引中的工作目录中的文件(即未暂存的文件)。 - mkarasek| tail -n1
,但很遗憾他没有按 OP 要求对索引文件执行操作。 - WORMSS