我发现在Git中非常有用的命令之一是git add -u
将除未跟踪文件以外的所有内容都放入索引中。有相反的说法吗?在过去的几个月中,我经常发现自己处于交互式地向索引添加了一些更新的位置,并且想要在提交之前将所有未跟踪的文件添加到该索引中。
有没有一种方法可以将未跟踪的文件仅添加到索引中而不单独识别它们?我没有在帮助文档中看到任何明显的内容,但是也许我错过了吗?
谢谢。
我发现在Git中非常有用的命令之一是git add -u
将除未跟踪文件以外的所有内容都放入索引中。有相反的说法吗?在过去的几个月中,我经常发现自己处于交互式地向索引添加了一些更新的位置,并且想要在提交之前将所有未跟踪的文件添加到该索引中。
有没有一种方法可以将未跟踪的文件仅添加到索引中而不单独识别它们?我没有在帮助文档中看到任何明显的内容,但是也许我错过了吗?
谢谢。
Answers:
容易git add -i
。输入a
(对于“添加未跟踪”),然后输入*
(对于“全部”),然后输入q
(退出),就可以完成。
要用一个命令来做到这一点: echo -e "a\n*\nq\n"|git add -i
echo -e "a\n*\nq\n"|git add -i
Argument list too long
... 很近!
git add -i
再4
添加未经跟踪然后*
所有,然后q
退出
git ls-files -o --exclude-standard
提供未跟踪的文件,因此您可以执行以下操作(或向其添加别名):
git add $(git ls-files -o --exclude-standard)
-o, --others
Show other (i.e. untracked) files in the output
您可以将其添加到〜/ .gitconfig文件中:
[alias]
add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"
然后,从命令行运行:
git add-untracked
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 stash && git add . && git stash pop
git stash
只会将所有修改后的跟踪文件放入单独的堆栈,然后剩余的文件就是未跟踪的文件。然后git add .
,根据需要将所有文件暂存为未跟踪的文件。最终,通过执行以下操作从堆栈中获取所有修改后的文件git stash pop
这里有很多好的技巧,但是在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约定,其中有动词-名词。
git添加 (将所有文件添加到此目录中)
git add -all (添加所有目录中的所有文件)
git add -N有助于列出以后的内容。
git add -u
将添加未跟踪的修改文件
.gitignore
是专门为此目的而设计的,而不是git add -u
。