【问题标题】:Show untracked files as git diff [duplicate]将未跟踪的文件显示为 git diff [重复]
【发布时间】:2016-01-20 03:56:45
【问题描述】:

当使用git diff 时,它只显示已经被跟踪的文件。有没有办法显示未跟踪的文件以及差异?目标是获得一个也包含此内容的 git 补丁,即我有一个以 git diff 开头并最终将其通过管道传输到 git apply 的脚本

【问题讨论】:

  • 你有没有在 SO 上翻找 like this one 的文章?
  • @TimBiegeleisen,我注意到了,但没有注意到 git ls-files -o 解决方案,因为它的投票不足,并且不正确的解决方案被标记为解决方案。

标签: git


【解决方案1】:

您可以使用git ls-files显示未跟踪的文件:

$ git ls-files -o

-o 是用于显示other 类型文件的标志,表示任何未编入索引的文件。请参阅ls-files documentation at git-scm.com

编辑:

这个答案没有直接回答问题。

比较未跟踪(未索引)文件的一个问题是没有 git 历史可以比较。对于未跟踪的文件,您必须有一些历史记录(除非您可以使用create diff)。在 cmets 中执行此操作的方法如下:

git ls-files -o --exclude-standard | xargs git add; git diff --staged
^                                  ^                ^
ls all untracked files             pipe to add      diff the staged files

本质上,您需要将所有文件添加到 git 索引,以便能够在更改上生成差异和补丁。

这会将未跟踪的文件添加到索引中,因此您必须在完成差异后自己记住并取消暂存它们。

出于无聊的输入清理原因,可以通过使用空终止符分隔git ls-files 的结果来再次改进此管道:

git ls-files -o --exclude-standard -z | xargs -O git add; git diff --staged
^                                   v ^        v        ^
ls all untracked files              | pipe to  |        diff the staged files
                                    | add      |
                                     \__________>-> Use Null as Output/Input delimeter

【讨论】:

  • 有用...但不回答问题。它列出了文件,但不显示 OP 正在寻找的那些文件的差异。此外,它还列出了 .gitignored 文件,这可能不是您在查看或未跟踪文件时想要的。
  • 同意以上评论。 git ls-files -o --exclude-standard | xargs git add; git diff --staged 可以解决问题,但是之后您必须取消暂存文件。
  • @DavidHempy 啊,是的,现在注意到了。这里的问题将变成,由于未跟踪的文件未编入索引,因此没有可用的差异数据。不过,philraj 对此提出了建议。我将编辑答案以使其更清楚。
猜你喜欢
  • 2013-09-01
  • 2011-06-04
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
  • 2017-08-04
  • 2016-02-27
  • 2018-08-31
  • 2021-11-01
相关资源
最近更新 更多