我在Git中发现的一个令人难以置信的命令是git add -u
,它将除了未跟踪文件之外的所有内容都放入索引中。有没有反过来?在过去的几个月中,我经常发现自己处于一种交互式添加索引更新的位置,我希望在提交之前将所有未跟踪的文件添加到该索引。仅添加未跟踪文件
有没有办法只将添加到未跟踪的文件到索引而不单独标识它们?我在帮助文档中看不到任何明显的内容,但也许我错过了它?
谢谢。
我在Git中发现的一个令人难以置信的命令是git add -u
,它将除了未跟踪文件之外的所有内容都放入索引中。有没有反过来?在过去的几个月中,我经常发现自己处于一种交互式添加索引更新的位置,我希望在提交之前将所有未跟踪的文件添加到该索引。仅添加未跟踪文件
有没有办法只将添加到未跟踪的文件到索引而不单独标识它们?我在帮助文档中看不到任何明显的内容,但也许我错过了它?
谢谢。
这很容易与git add -i
。键入a
(对于“添加未跟踪”),然后*
(对于“全部”),然后q
(退出),完成。
要使用一个命令做到这一点:echo -e "a\n*\nq\n"|git add -i
我希望有更少的东西,好,互动,但它肯定比档案文件更好。 :-) –
@回声-e“a \ n * \ nq \ n”| git add -i' – Mat
@Mat我来完成这个完全自动化,就像上面的评论。谢谢。 –
git ls-files -o --exclude-standard
给未跟踪文件,所以你可以这样做以下(或添加一个别名的话):
git add $(git ls-files -o --exclude-standard)
alias gau =“git ls-files -o --exclude-standard | xargs -i git add'{}'”适合我 – Stephan
git ls-files --help相当有用阅读: '-o,--others' '在输出中显示其他(即未跟踪的)文件' –
您可以将它添加到你的〜/的.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 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
不知道为什么这是唯一的工作,但它是,谢谢 – slackbot39243
要添加的所有未跟踪文件 混帐命令
混帐添加-A
此外,如果你想获得各种可用选项的详细信息,您可以键入命令
混帐添加-i
,而不是第一个命令,这个你会得到更多的选择,包括选择添加所有未跟踪的文件如下所示:
$ git add -i warning:LF将被README.txt中的CRLF替换。 文件将在其工作目录中具有其原始行尾。 警告:LF将被package.json中的CRLF所取代。
*命令* 1:状态2:更新3:回复4:添加未经跟踪的5块6:DIFF 7:退出8: 帮助现在什么>一个
人建议通过管道将输出git ls-files
到git add
,但是如果文件名包含空格或水平字符(例如*
),则会失败。
的安全的方式是使用:
git ls-files -o --exclude-standard -z | xargs -0 git add
其中-z
告诉混帐使用\0
行结束符和-0
告诉xargs的相同。这种方法的唯一缺点是-0
选项是非标准的,因此只有某些版本的xargs
支持它。
如果您有成千上万的未跟踪文件(唉,不要问),那么当添加*
时,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
关于“将所有未处理的文件都扔入索引中”,“.gitignore”专门为此目的而设计,而不是'git add -u'。 – Pacerier
另外,你是否要求在删除所有当前跟踪的文件的同时添加未跟踪的文件,或者你是否要求在当前跟踪的文件的顶部**添加未跟踪的文件**(使所有事件都被跟踪)? – Pacerier