397

有没有办法使用一个命令,比如git ls-files只显示未跟踪的文件?

我问的原因是因为我使用以下命令来处理所有已删除的文件:

git ls-files -d | xargs git rm

对于未跟踪的文件,我想要类似的东西:

git some-command --some-options | xargs git add

我能够找到 的-o选项git ls-files,但这不是我想要的,因为它还显示被忽略的文件。我还能够想出以下长而丑陋的命令:

git status --porcelain | grep '^??' | cut -c4- | xargs git add

似乎必须有一个更好的命令我可以在这里使用。如果没有,我如何创建自定义 git 命令?

4

9 回答 9

623

要列出未跟踪的文件,请尝试:

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

如果您需要将输出通过管道传输到,明智的做法是使用andxargs记住空格:git ls-files -zxargs -0

git ls-files -z -o --exclude-standard | xargs -0 git add

添加未跟踪文件的好别名:

au = !git add $(git ls-files -o --exclude-standard)

编辑:供参考:git-ls-files

于 2010-09-27T06:29:49.127 回答
79

如果您只想删除未跟踪的文件,请执行以下操作:

git clean -df

x如果您还想包括特别被忽略的文件,请添加。我git clean -dfx一整天都用很多。

您可以通过编写一个名为的脚本git-whatever并将其放在您的路径中来创建自定义 git。

于 2010-09-27T05:34:30.707 回答
62

git add -A -n会做你想做的。-A将所有未跟踪和修改的文件添加到存储库,-n使其成为dry-run不执行添加但状态输出列出每个已添加的文件的位置。

于 2012-04-04T14:37:44.103 回答
33

一切都很简单

要获取所有未跟踪文件的列表,请使用带有选项-u (--untracked-files) 的命令git status

git status -u
于 2014-11-10T09:29:24.617 回答
31

接受的答案在带有空格的文件名上崩溃。我现在不确定如何更新 alias 命令,所以我将改进版本放在这里:

git ls-files -z -o --exclude-standard | xargs -0 git add
于 2011-12-14T14:31:21.137 回答
10

我知道这是一个老问题,但在列出未跟踪文件方面,我想我会添加另一个也列出未跟踪文件夹的文件:

您可以将 git clean 操作与 -n (试运行)一起使用,通过以下方式向您显示它将删除哪些文件(包括 .gitignore 文件):

git clean -xdn

这样做的好处是可以显示所有未跟踪的文件所有文件夹。参数:

  • x- 显示所有未跟踪的文件(包括被 git 和其他人忽略的文件,如构建输出等......)
  • d- 显示未跟踪的目录
  • n- 最重要的是!-dryrun,即实际上不删除任何内容,只需使用清理机制来显示结果。

这样做可能有点不安全,以防你忘记了-n. 所以我通常在 git config 中给它起别名。

于 2018-02-28T13:11:42.380 回答
8

在寻找可能添加的文件时。的输出git show做到了这一点,但它还包括很多其他的东西。以下命令可用于获取相同的文件列表但不包含所有其他内容。

 git status --porcelain | grep "^?? " | sed -e 's/^[?]* //'

当在管道中组合以查找与特定模式匹配的文件然后将其通过管道传输到git add.

git status --porcelain | grep "^?? "  | sed -e 's/^[?]* //' | \
egrep "\.project$|\.settings$\.classfile$" | xargs -n1 git add
于 2015-06-17T11:57:21.493 回答
5

我检查的所有以前的答案也会列出要提交的文件。这是一个简单易用的解决方案,它仅列出尚未在 repo 中且不受.gitignore.

git status --porcelain | awk '/^\?\?/ { print $2; }'

或者

git status --porcelain | grep -v '\?\?'
于 2018-11-02T12:26:22.260 回答
-3

我认为这将与原始海报的意图相同:

git add .

添加一些警告:

  • 您已经运行git status并确认您的本地目录是干净的
  • 您已git diff对 中报告的每个文件运行git status,并确认您的更改是干净的
  • 您的更改包含在自动化单元测试中
  • 您的更改包含在自动化集成测试中
  • 您已经通过调试器运行了集成测试,通过白盒观察新代码的运行来验证新行为
  • 您已经运行了所有 linting / 代码约定规则并且它们通过了
  • 您已经运行了所有单元测试并且它们通过了
  • 您已经运行了所有本地集成测试,并且它们通过了
  • 您已将更改部署到应用审查环境,并在与其他更改隔离的情况下对它们进行端到端手动测试
  • 您已从主分支合并最新并重新运行所有自动化单元和集成测试,修复任何合并冲突和测试失败

现在,我的朋友,你已经准备好git add .不受惩罚了。

于 2012-06-04T21:36:32.650 回答