只添加未跟踪的文件

我在Git中find的一个非常有用的命令是git add -u ,它将所有未处理的文件都放入索引中。 有没有相反的? 在过去的几个月中,我经常发现自己处于一个交互式添加索引更新的位置,我希望在提交之前将所有未跟踪的文件添加到该索引。

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

谢谢。

git add -i很容易。 键入a (为“添加untracked”),然后* (为“所有”),然后q (退出),你就完成了。

用一个命令来完成: echo -e "a\n*\nq\n"|git add -i

git ls-files -o --exclude-standard给出了未跟踪的文件,所以你可以像下面这样做(或者添加一个别名):

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

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

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

然后,从命令行运行:

 git add-untracked 

不完全是你在找什么,但我发现这相当有帮助:

 git add -AN 

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

人们已经build议将git ls-files的输出pipe道化为git add但是如果文件名包含空格或者诸如*这样的水平字符,这将会失败。

安全的方法是使用:

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

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

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 

如果你有成千上万的未跟踪文件(呃,不要问),那么添加*时, git add -i将不起作用。 你会得到一个错误,说明Argument list too long

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

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

我试过这个,它的工作原理:

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

git stash只会把所有修改后的跟踪文件放入单独的堆栈,然后剩下的文件是未跟踪的文件。 然后通过做git add . 将根据需要放置所有文件未跟踪的文件。 最后,通过git stash pop从堆栈中获取所有修改过的文件

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

git add -A

另外如果你想获得更多关于各种可用选项的细节,你可以input命令

git add -i

而不是第一个命令,用这个,你会得到更多的选项,包括添加所有未跟踪文件的选项,如下所示:

$ git add -i警告:LF将被README.txt中的CRLFreplace。 该文件的原始行结束在您的工作目录中。 警告:LF将被package.json中的CRLF所取代。

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