【问题标题】:git ls-files: howto identify new files (added, not committed)?git ls-files:如何识别新文件(添加,未提交)?
【发布时间】:2010-02-19 16:50:08
【问题描述】:

在我调用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 那样解析大量输出)?

【问题讨论】:

    标签: git


    【解决方案1】:

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

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

    【讨论】:

    • 仅供参考:您的“最严格阅读”不包括 --cached 标志。
    • 为了您的复制乐趣:git diff --cached --name-only
    • 不,我们想使用ls-files,这就是我们来这里的原因
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 问题是一个文件与.gitignore 文件中的规则相匹配,并添加了git add -f ...它不会显示为--exclude-standard。我想知道git status 从哪里获取信息
    • 等等,我可能搞砸了——您是想要仍然需要添加的文件,还是在寻找新添加的已经在索引中的文件?
    • 我正在寻找已添加到索引中但尚未提交的文件
    • 啊,那我觉得安德鲁的回答更好。将编辑我的以澄清这一点。
    【解决方案3】:

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

    当我使用git diff --cached --name-only &amp;&amp; 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
    

    【讨论】:

      猜你喜欢
      • 2020-06-24
      • 2020-01-03
      • 2016-08-13
      • 2021-06-19
      • 2012-05-14
      • 2020-09-06
      • 2017-07-26
      • 1970-01-01
      • 2020-08-06
      相关资源
      最近更新 更多