196

我发现在 Git 中非常有用的命令之一是git add -u将除未跟踪文件之外的所有内容都放入索引中。有没有相反的情况?

例如一种将未跟踪文件添加到索引而不单独识别它们的方法?

4

11 回答 11

289

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

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

于 2011-09-16T15:06:40.023 回答
42

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

git add $(git ls-files -o --exclude-standard)
于 2011-09-16T15:21:04.240 回答
19

不完全是您要查找的内容,但我发现这很有帮助:

git add -AN

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

于 2013-12-04T18:51:42.940 回答
12

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

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

然后,从命令行运行:

git add-untracked
于 2012-11-17T02:12:43.583 回答
12

人们建议将输出通过管道git ls-files传输到,git add但如果文件名包含空格或全局字符(例如*.

安全的方法是使用:

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

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

于 2015-08-11T08:56:07.747 回答
11

我试过了,它奏效了:

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

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

于 2017-11-05T16:35:22.580 回答
8

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
于 2014-04-24T01:40:48.353 回答
2

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

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

git ls-files -o --exclude-standard | select | foreach { git add $_ }
于 2016-10-21T08:41:56.037 回答
1

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

我是一个.NET开发人员,我们主要还是用Windows操作系统,因为我们没有太多使用.Net核心和跨平台,所以我日常使用Git是在Windows环境中,使用的shell更多是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 环境恕我直言中的 source 命令。

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

AddUntracked-Git

This follows the Powershell convention where you have verb-nouns.

于 2019-05-10T14:04:48.820 回答
1

git add . (add all files in this directory)

git add -all (add all files in all directories)

git add -N can be helpful for for listing which ones for later....

于 2019-07-10T19:29:29.570 回答
-3

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

git添加-A

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

git 添加 -i

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

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

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

于 2014-06-09T16:37:38.020 回答