Git 中只添加未跟踪的文件

我发现Git中一个非常有用的命令是git add -u,它可以将除未跟踪文件外的所有文件扔到索引中。它有倒数吗?

例如,将只有未跟踪的文件添加到索引不需要单独识别它们?

135886 次浏览

使用git add -i很简单。输入a(表示“添加未跟踪”),然后是*(表示“所有”),然后是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 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命令

git添加-A

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

Git add -i

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

$ git add -i warning:在README.txt中将LF替换为CRLF。的 文件将在您的工作目录中有其原始的行结束符。

.json中的LF将被CRLF取代

*命令* 1: status 2: update 3: revert 4: add untracked 5: patch 6: diff 7: quit 8: help What now> a

人们建议将git ls-files的输出连接到git add,但在文件名包含空格或glob字符(如*)的情况下,这将失败。

安全的方法是使用:

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

其中-z告诉git使用\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从堆栈中取回所有修改过的文件

很多好的提示在这里,但在Powershell我不能让它工作。

我是一个。net开发人员,我们主要还是使用Windows操作系统,因为我们没有使用。net核心和跨平台那么多,所以我每天使用Git是在Windows环境下,在那里使用的shell通常是Powershell,而不是Git bash。

可以按照以下步骤创建一个别名函数,用于在Git存储库中添加未跟踪的文件。

在Powershell的$profile文件中(如果它丢失了-您可以运行: 新项目概要美元)< / p >

记事本美元概要

现在添加这个Powershell方法:

function AddUntracked-Git() {
&git ls-files -o --exclude-standard | select | foreach { git add $_ }
}
保存$profile文件并重新加载到Powershell中。 然后重新加载$profile文件: . 美元概要文件< / p >

恕我直言,这类似于*nix环境中的source命令。

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

AddUntracked-Git

这遵循Powershell惯例,即动词-名词。

Git添加。(添加该目录下的所有文件)

git add -all (添加所有目录下的所有文件)

git add -N可以帮助列出后面的....