仅添加未经跟踪的文件

Rob*_*son 147 git git-add

我发现在Git中非常有用的命令之一就是git add -u将除了未跟踪文件之外的所有文件抛出到索引中.那有反过来了吗?在过去的几个月里,我经常发现自己处于这样一个位置:我交互式地为索引添加了一些更新,我希望在提交之前将所有未跟踪的文件添加到该索引中.

有没有办法将未跟踪的文件添加到索引而不单独识别它们?我在帮助文档中没有看到任何明显的东西,但也许我错过了它?

谢谢.

Mat*_*Mat 211

这很简单git add -i.输入a(用于"添加未跟踪"),然后输入*(用于"全部"),然后输入q(退出)并完成.

要使用单个命令执行此操作: echo -e "a\n*\nq\n"|git add -i

  • `echo -e"a \n*\nq \n"| git add -i` (34认同)
  • 我希望有更少,更好,互动的东西,但它肯定比逐个文件更好.:-) (4认同)
  • 对我来说,使用 git 2.21.0 是“git add -i”,然后“4”添加未跟踪的内容,然后“*”添加所有内容,然后“q”退出 (3认同)

man*_*lds 33

git ls-files -o --exclude-standard 提供未跟踪的文件,因此您可以执行以下操作(或为其添加别名):

git add $(git ls-files -o --exclude-standard)
Run Code Online (Sandbox Code Playgroud)


has*_*sen 14

不完全是你想要的,但我发现这非常有帮助:

git add -AN
Run Code Online (Sandbox Code Playgroud)

将所有文件添加到索引,但没有其内容.现在未跟踪的文件就像跟踪它们一样.他们的内容将显示在git diff,您可以交互式添加git add -p.


小智 11

您可以将其添加到〜/ .gitconfig文件中:

[alias]
    add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"
Run Code Online (Sandbox Code Playgroud)

然后,从命令行,运行:

git add-untracked
Run Code Online (Sandbox Code Playgroud)


Tom*_*ech 9

人们已经建议管道输出git ls-files到,git add但是如果文件名包含空格或者包含诸如的字符,则会失败*.

安全的方法是使用:

git ls-files -o --exclude-standard -z | xargs -0 git add
Run Code Online (Sandbox Code Playgroud)

这里-z告诉git的使用\0行结束符,并-0告诉xargs的相同.这种方法的唯一缺点是该-0选项是非标准的,因此只有一些版本xargs支持它.


小智 6

git ls-files列出当前目录中的文件。如果要从树中的任何位置列出未跟踪的文件,则可能会更好:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel)
Run Code Online (Sandbox Code Playgroud)

要将所有未跟踪的文件添加到树中:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add
Run Code Online (Sandbox Code Playgroud)


Roh*_*ude 5

我尝试了一下,它起作用了:

git stash && git add . && git stash pop
Run Code Online (Sandbox Code Playgroud)

git stash只会将所有修改后的跟踪文件放入单独的堆栈,然后剩下的文件就是未跟踪的文件。然后git add .,根据需要将所有文件暂存为未跟踪的文件。最终,通过执行以下操作从堆栈中获取所有修改的文件git stash pop