我发现Git中一个非常有用的命令是git add -u,它可以将除未跟踪文件外的所有文件扔到索引中。它有倒数吗?
git add -u
例如,将只有未跟踪的文件添加到索引不需要单独识别它们?
使用git add -i很简单。输入a(表示“添加未跟踪”),然后是*(表示“所有”),然后是q(退出),这样就完成了。
git add -i
a
*
q
使用一个命令:echo -e "a\n*\nq\n"|git add -i
echo -e "a\n*\nq\n"|git add -i
git ls-files -o --exclude-standard给出了未跟踪的文件,所以你可以像下面这样做(或给它添加一个别名):
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 diff
git add -p
git ls-files列出当前目录下的文件。如果你想从树的任何地方列出未跟踪的文件,这可能会更好:
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 add -i warning:在README.txt中将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 add
安全的方法是使用:
git ls-files -o --exclude-standard -z | xargs -0 git add
其中-z告诉git使用\0行结束符,-0告诉xargs使用相同的行结束符。这种方法的唯一缺点是-0选项是非标准的,所以只有一些版本的xargs支持它。
-z
\0
-0
xargs
如果你有成千上万个未跟踪的文件(呃,不要问),那么在添加*时git add -i将不起作用。你会得到一个声明Argument list too long的错误。
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 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 $_ } }
恕我直言,这类似于*nix环境中的source命令。
AddUntracked-Git
这遵循Powershell惯例,即动词-名词。
Git添加。(添加该目录下的所有文件)
git add -all (添加所有目录下的所有文件)
git add -N可以帮助列出后面的....