当我使用git add *
时,它会跳过一些文件和文件夹。但是对于另一个项目,同样的命令git add *
却能完美地工作。但是当我使用git add -f *
时,它却可以正常工作。
当我使用git add *
时,它会跳过一些文件和文件夹。但是对于另一个项目,同样的命令git add *
却能完美地工作。但是当我使用git add -f *
时,它却可以正常工作。
好的,这是来自 Git 参考手册 ref https://git-scm.com/docs/git-add 的内容:
git add
命令默认不会添加被忽略的文件。如果命令行明确指定了任何被忽略的文件,那么git add
将会失败,并列出被忽略的文件列表。可以使用-f
(强制)选项来添加被忽略的文件。
git add *
命令中,*
是由 shell 解释的,与 Git 无关。如果你的 shell 是 Bash,则以 .
开头的文件和目录默认不会被 *
匹配到,因此不会被传递给 git add
,也不会被添加到索引中。如果想要添加包括以 .
开头的所有文件,最好使用 git add .
而不是 git add *
。git add
不会添加标记为被忽略的文件。你可以使用 -f
强制添加这些文件,但很可能你不想这样做,因为这个标志有非常少的合法使用情况。git add *
,*
将被直接传递给 git add
,此时 Git 而不是 shell 解释该符号。在这种情况下,以 .
开头的文件和目录将会被添加。尽管没有必要(除了演示之外),但在 Linux 或类似系统上可以模拟这种情况,只需运行 git add '*'
即可,因为 git add .
同样有效。git add *
,则*
会被直接传递给git add
,此时Git而不是shell会解释*
。在这种情况下,以*
开头的文件和目录将被添加。可以通过运行git add '*'
在Linux或类似系统上模拟此操作,但除了演示之外,没有理由这样做,因为git add .
同样有效。 - undefined在 "git add" 命令后面加上 "-f" 或 "--force" 属性意味着你强制添加被忽略的文件到暂存区(这意味着这些文件将成为下一次提交的一部分)。
因此,“git add *” 和 “git add -f ” 的区别在于,第一种情况下,你添加了除被忽略的文件之外的所有文件(),而在第二种情况下,你添加了所有文件(并强制 git 添加在 .gitignore 文件中通知的被忽略的文件)。
git add
man page:
默认情况下,git add命令不会添加被忽略的文件。如果在命令行上明确指定了任何被忽略的文件,git add将失败并显示被忽略的文件列表。通过Git执行的目录递归或文件名通配符(在shell之前引用您的通配符)找到的被忽略的文件将被静默忽略。可以使用git add命令的-f(强制)选项来添加被忽略的文件。