git ls-files:如何识别新文件(已添加,未提交)?

在我致电ls-files之后,命令git status将显示以下内容:

...
new file:    <file>

我以某种方式无法通过使用ls-files来管理它以获取相同的信息,它(在这种情况下为git status)将向我显示:

H <commited file>
H <other commited file>
H <file>

似乎没有命令行开关可用于新文件。 该文件报告为已缓存,可以,但是如何确定当前未提交该文件?

ls-files或某些类似的命令(在我不必像git status这样的情况下不必解析大量输出)的情况下,这可能吗?

tanascius asked 2019-10-07T10:28:53Z
2个解决方案
75 votes

您想使用git diff --cached。对于git diff --cached --name-only --diff-filter=A,它将列出您在相对于HEAD的索引中更改的所有文件。 使用--name-status,您还可以获取状态符号;使用--diff-filter,您可以指定要显示的文件集(例如,新添加的文件为“ A”)。 如果需要,可使用-M打开移动检测,并使用-C进行复制检测。

为了最严格地阅读您写的内容,git diff --cached --name-only --diff-filter=A将列出您自HEAD之后添加的所有文件,这些文件在HEAD中不存在。

Andrew Aylett answered 2019-10-07T10:29:14Z
39 votes

澄清:这是一种显示我要添加的文件的方法。 这不是OP所要的,但是我会保留此帖子,以防它对其他人有用。

这似乎只显示我添加的文件(到我的工作副本中,而不是索引中),但与我的标准忽略模式不匹配:

 $ git ls-files --others --exclude-standard

如果没有--exclude-standard,它还会显示我运行git status时忽略的文件。

Mike Seplowitz answered 2019-10-07T10:29:55Z
translate from https://stackoverflow.com:/questions/2298047/git-ls-files-howto-identify-new-files-added-not-committed