"git add *" 和 "git add -f *" 有什么区别?

3

当我使用git add *时,它会跳过一些文件和文件夹。但是对于另一个项目,同样的命令git add *却能完美地工作。但是当我使用git add -f *时,它却可以正常工作。


https://git-scm.com/docs/git-add#git-add--f - undefined
1
执行git的位置很重要。项目可能有不同的忽略文件,这些文件由git用于过滤无关紧要的文件或文件夹。请注意,git add使用相对路径。-f或--force允许添加被忽略的文件。参见:https://git-scm.com/docs/git-add - undefined
4个回答

4

好的,这是来自 Git 参考手册 ref https://git-scm.com/docs/git-add 的内容:

git add 命令默认不会添加被忽略的文件。如果命令行明确指定了任何被忽略的文件,那么 git add 将会失败,并列出被忽略的文件列表。可以使用 -f(强制)选项来添加被忽略的文件。


2
git add * 命令中,* 是由 shell 解释的,与 Git 无关。如果你的 shell 是 Bash,则以 . 开头的文件和目录默认不会被 * 匹配到,因此不会被传递给 git add,也不会被添加到索引中。如果想要添加包括以 . 开头的所有文件,最好使用 git add . 而不是 git add *
另外,正如其他答案指出的那样,git add 不会添加标记为被忽略的文件。你可以使用 -f 强制添加这些文件,但很可能你不想这样做,因为这个标志有非常少的合法使用情况。
@torek 的一条非常有价值的评论:
值得注意的是:如果在 Windows 非 bash 解释器中运行 git add ** 将被直接传递给 git add,此时 Git 而不是 shell 解释该符号。在这种情况下,以 .开头的文件和目录将会被添加。尽管没有必要(除了演示之外),但在 Linux 或类似系统上可以模拟这种情况,只需运行 git add '*' 即可,因为 git add . 同样有效。

1
值得注意的是:如果在Windows非bash解释器中运行git add *,则*会被直接传递给git add,此时Git而不是shell会解释*。在这种情况下,以*开头的文件和目录将被添加。可以通过运行git add '*'在Linux或类似系统上模拟此操作,但除了演示之外,没有理由这样做,因为git add .同样有效。 - undefined

0

在 "git add" 命令后面加上 "-f" 或 "--force" 属性意味着你强制添加被忽略的文件到暂存区(这意味着这些文件将成为下一次提交的一部分)。

因此,“git add *” 和 “git add -f ” 的区别在于,第一种情况下,你添加了除被忽略的文件之外的所有文件(),而在第二种情况下,你添加了所有文件(并强制 git 添加在 .gitignore 文件中通知的被忽略的文件)。

来源:https://git-scm.com/docs/git-add#git-add--f


0

git add man page

默认情况下,git add命令不会添加被忽略的文件。如果在命令行上明确指定了任何被忽略的文件,git add将失败并显示被忽略的文件列表。通过Git执行的目录递归或文件名通配符(在shell之前引用您的通配符)找到的被忽略的文件将被静默忽略。可以使用git add命令的-f(强制)选项来添加被忽略的文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接