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

时间:2010-02-19 16:50:08

标签: git

在我致电git add <file>后,命令git status会向我显示如下内容:

...
new file:    <file>

不知怎的,我无法通过ls-files来管理它来获取相同的信息,它(在这种情况下为ls-files -tc)会告诉我:

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

新文件似乎没有命令行切换。该文件被报告为缓存,这没关系,但我怎么知道它目前没有提交?

这可能与ls-files或类似命令(我不需要像git status那样解析大量输出一样)吗?

3 个答案:

答案 0 :(得分:75)

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

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

答案 1 :(得分:39)

澄清:这是一种显示我打算要添加的文件的方法。这不是OP所期待的,但我会留下这篇文章,以防它对其他人有用。

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

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

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

答案 2 :(得分:1)

我想查看所有添加和修改的文件,所以合并
git diff --cached --name-only
+
git ls-files --modified --deleted
但两者之间没有[1]+ Stopped ...

使用git diff --cached --name-only && git ls-files --modified --deleted时,我收到:

content/blog/2020/05/artificial-intellect.json
content/blog/2020/05/artificial-intellect.pug

[1]+  Stopped                 git diff --cached --name-only
content/index.json
index.php