我发现在 Git 中非常有用的命令之一是git add -u
将除未跟踪文件之外的所有内容都放入索引中。有没有相反的情况?
例如一种仅将未跟踪文件添加到索引而不单独识别它们的方法?
这很容易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)
不完全是您要查找的内容,但我发现这很有帮助:
git add -AN
将所有文件添加到索引中,但没有它们的内容。未跟踪的文件现在的行为就像它们被跟踪一样。它们的内容将显示在 中git diff
,然后您可以使用 交互式添加git add -p
。
您可以将其添加到您的 ~/.gitconfig 文件中:
[alias]
add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"
然后,从命令行运行:
git add-untracked
人们建议将输出通过管道git ls-files
传输到,git add
但如果文件名包含空格或全局字符(例如*
.
安全的方法是使用:
git ls-files -o --exclude-standard -z | xargs -0 git add
where-z
告诉 git 使用\0
行终止符并-0
告诉 xargs 相同。这种方法的唯一缺点是该-0
选项是非标准的,因此只有某些版本xargs
支持它。
我试过了,它奏效了:
git stash && git add . && git stash pop
git stash
只会将所有修改过的跟踪文件放入单独的堆栈中,然后剩下的文件是未跟踪的文件。然后根据git add .
需要将所有文件暂存为未跟踪文件。最终,通过执行从堆栈中取回所有修改过的文件git stash pop
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 add -i
添加*
. 您将收到一条错误消息Argument list too long
。
如果您也在 Windows 上(不要问 #2 :-) 并且需要使用 PowerShell 来添加所有未跟踪的文件,您可以使用以下命令:
git ls-files -o --exclude-standard | select | foreach { git add $_ }
这里有很多好的技巧,但在 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.
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....
添加所有未跟踪的文件 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