我试图找出如何轻松地计数文件在我的未提交索引。
我试过了:
git status | grep '#' | wc -l
但是有一些以 #开头的行并不表示已更改的文件。有更好的吗?我想 git status应该有个标志才能这么做。
#
git status
即使像 GitX 这样的工具也不容易让您选择暂存文件/目录并查看其中有多少。
试试 git status -s:
git status -s
git status -s | egrep "^M" | wc -l
行开始后面的 M(^)表示一个暂存文件。带有空格的 ^ M将是一个非暂存但已更改的文件。
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-files比 diff --stat快得多:
ls-files
diff --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):
--cached
git diff --shortstat