仅添加未跟踪的文件


168

我发现在Git中非常有用的命令之一是git add -u将除未跟踪文件以外的所有内容都放入索引中。有相反的说法吗?在过去的几个月中,我经常发现自己处于交互式地向索引添加了一些更新的位置,并且想要在提交之前将所有未跟踪的文件添加到该索引中。

有没有一种方法可以将未跟踪的文件添加到索引中而不单独识别它们?我没有在帮助文档中看到任何明显的内容,但是也许我错过了吗?

谢谢。


1
关于“将除未跟踪的文件以外的所有内容都放入索引”,.gitignore是专门为此目的而设计的,而不是git add -u
Pacerier,2015年

另外,您是否要在删除所有当前跟踪文件的同时添加未跟踪文件,还是要在当前跟踪文件的顶部添加未跟踪文件(使所有文件都被跟踪)?
Pacerier,2015年

Answers:


236

容易git add -i。输入a(对于“添加未跟踪”),然后输入*(对于“全部”),然后输入q(退出),就可以完成。

要用一个命令来做到这一点: echo -e "a\n*\nq\n"|git add -i


4
我本来希望可以减少交互性,但是肯定比逐个文件好。:-)
Rob Wilkerson

34
echo -e "a\n*\nq\n"|git add -i

@Mat谢谢你,所以是完整的命令----> git add -ia * q ??
BKSpurgeon '16

Argument list too long... 很近!
Simeon

1
对我来说,用git 2.21.0是有人git add -i4添加未经跟踪然后*所有,然后q退出
哈利乙

36

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

git add $(git ls-files -o --exclude-standard)

1
别名gau =“ git ls-files -o --exclude-standard | xargs -i git add'{}'”对我有用
Stephan

git ls-files --help是非常有用的阅读: -o, --others Show other (i.e. untracked) files in the output
Joshua Kunzmann 2012年

15

并不是您要找的东西,但是我发现这很有帮助:

git add -AN

将所有文件添加到索引,但不包含它们的内容。现在,未跟踪的文件的行为就像被跟踪一样。它们的内容将显示在中git diff,您可以与添加然后进行交互git add -p


这正是我想要的-也允许git commit -p遍历新文件。
nitsujri

11

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

[alias]
    add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"

然后,从命令行运行:

git add-untracked

我喜欢这种方法,但是它不能处理文件名中的空格。
Paul Coccoli 2016年

9

人们建议使用管道git ls-files传递到的输出,git add但是如果文件名包含空格或glob字符(如),则此操作将失败*

安全的方法是使用:

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

where -z告诉git使用\0行终止符,并-0告诉xargs相同。这种方法的唯一缺点是该-0选项是非标准的,因此仅某些版本xargs支持该选项。


6

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

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel)

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

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add

6

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

git stash && git add . && git stash pop

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


0

如果您有成千上万个未跟踪的文件(嗯,不要问),那么git add -i添加时将不起作用*。您将看到一条错误消息Argument list too long

如果然后您也使用Windows(不要问#2 :-),并且需要使用PowerShell添加所有未跟踪的文件,则可以使用以下命令:

git ls-files -o --exclude-standard | select | foreach { git add $_ }

一个更git ls-files -o --exclude-standard | % { git add $_ }
简洁的

0

这里有很多好的技巧,但是在Powershell中,我无法使其正常工作。

我是.NET开发人员,我们仍然主要使用Windows操作系统,因为我们没有过多地使用.Net核心和跨平台,因此我与Git的日常使用是在Windows环境中,在该环境中使用的外壳更多是Powershell而不是Git bash。

可以遵循以下过程来创建别名函数,以在Git存储库中添加未跟踪的文件。

在Powershell的$ profile文件中(以防丢失-您可以运行:New-Item $ Profile)

记事本$ Profile

现在添加此Powershell方法:

function AddUntracked-Git() {
 &git ls-files -o --exclude-standard | select | foreach { git add $_ }
}

保存$ profile文件,然后将其重新加载到Powershell中。然后使用来重新加载$ ​​profile文件。$个人资料

这类似于* nix环境IMHO中的source命令。

因此,下一次,如果您是开发人员,在Windows中针对Git存储库使用Powershell,并且只想包含未跟踪的文件,则可以运行:

添加未跟踪的Git

这遵循Powershell约定,其中有动词-名词。



-3

要添加所有未跟踪的文件,git命令是

git添加-A

另外,如果您想获得有关各种可用选项的更多详细信息,则可以键入command

git添加-i

代替第一个命令,您将获得更多选项,包括添加所有未跟踪文件的选项,如下所示:

$ git add -i警告:在README.txt中,LF将被CRLF替换。该文件将在您的工作目录中具有其原始行结尾。警告:LF将在package.json中由CRLF替换。

*命令* 1:状态2:更新3:还原4:添加未跟踪5:补丁6:差异7:退出8:帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.