仅添加未经跟踪的文件

时间:2011-09-16 15:01:41

标签: git git-add

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

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

感谢。

11 个答案:

答案 0 :(得分:201)

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

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

答案 1 :(得分:29)

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

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

答案 2 :(得分:10)

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

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

然后,从命令行开始,运行:

git add-untracked

答案 3 :(得分:10)

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

git add -AN

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

答案 4 :(得分:9)

人们建议将git ls-files的输出汇总到git add,但如果文件名包含空格或全局字符(例如*),则会失败。

安全的方法是使用:

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

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

答案 5 :(得分:5)

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 :(得分:3)

我试过这个并且有效:

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

git stash只会将所有修改后的跟踪文件放入单独的堆栈中,然后留下的文件是未跟踪的文件。然后通过执行git add .将根据需要暂存所有文件未跟踪文件。最后,通过执行git stash pop

从堆栈中取回所有修改过的文件

答案 7 :(得分:0)

如果您有数千个未跟踪的文件(呃,请不要问),那么添加git add -i*将无效。您将收到一条错误消息,指出Argument list too long

如果你当时也在Windows上(不要问#2 :-)并且需要使用PowerShell添加所有未跟踪的文件,你可以使用这个命令:

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

答案 8 :(得分:0)

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

我是.NET开发人员,我们仍然主要使用Windows OS,因为我们还没有太多使用.Net核心和跨平台,因此我每天在Git中使用的是Windows环境,其中使用的外壳是更常见的是Powershell,而不是Git bash。

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

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

记事本$ Profile

现在添加此Powershell方法:

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

保存$ profile文件,然后将其重新加载到Powershell中。 然后使用以下命令重新加载您的$ profile文件: 。 $ profile

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

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

AddUntracked-Git

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

答案 9 :(得分:0)

git add -u (未跟踪的文件)

git add。 (在此目录中添加所有文件)

git add -all (添加所有目录中的所有文件)

答案 10 :(得分:-3)

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

  

git add -A

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

  

git add -i

而不是第一个命令,通过这个,您将获得更多选项,包括添加所有未跟踪文件的选项,如下所示:

  

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

     

*命令* 1:状态2:更新3:恢复4:添加未跟踪5:补丁6:差异7:退出8:   帮助现在什么>一个