只添加未跟踪的文件
我在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