“ git add -A”和“ git add”之间的区别

git add [--all|-A]命令彷佛与git add .相同git add . 。 这个对吗? 若是没有,它们有何不一样? git


#1楼

Git 2.0中, git add -A是默认值: git add . 等于git add -A .github

git add <path>如今与“ git add -A <path> ”相同,所以“ git add dir/ ”将注意到您从目录中删除的路径并记录该删除。
在旧版本的Git中,“ git add <path> ”用于忽略删除。 ide

若是您确实愿意,能够说“ git add --ignore-removal <path> ”仅在<path>添加添加或修改的路径。 学习

git add就像git add :/从顶部git repo文件夹添加全部内容 )。
请注意,git 2.7(2015年11月)将容许您添加一个名为“ : ”的文件夹!
参见Junio C gitstergitster 提交的29abb33 (2015年10月25日ui


请注意,在谈论git add .时, 从git 2.0开始(2014年第一季度或第二季度) git add . (工做树中的当前路径),您必须使用' . 在其余git add命令。 spa

这意味着: 命令行

git add -A .等效于git add .; git add -u . code

(请注意git add -Agit add -u的额外' . ') 递归

由于git add -Agit add -u会在整个工做树上运行(仅从git 2.0开始),而不只仅是在当前路径上运行。 索引

这些命令将在Git 2.0中的整个树上运行,以与“ git commit -a ”和其余命令保持一致 。 由于没有机制可使“ git add -u ”表现得像“ git add -u . ”,因此对于那些习惯于“ git add -u ”(无pathspec)的人来讲,仅更新路径索引很是重要在当前子目录中开始训练他们的手指,使其在Git 2.0出现以前明确表示“ git add -u . ”。

当这些命令在没有路径规范的状况下运行时,以及在当前目录以外进行本地更改时,都会发出警告 ,由于在这种状况下,Git 2.0中的行为将不一样于今天的版本。


#2楼

一个更简化的快速答案:

在下面都作(与git add --all同样

git add -A

暂存新文件和修改过的文件

git add .

阶段修改和删除文件

git add -u

#3楼

这是用于快速理解的表:

Git版本1.x在此处输入图片说明

Git版本2.x在此处输入图片说明

长格式标志:

  • git add -A等同于git add --all
  • git add -u等效于git add --update

进一步阅读:


#4楼

Git 2.0 改变了一些事情

  • -A如今是默认值
  • 如今可使用--ignore-removal旧行为
  • 子目录中没有命令行路径的git add -ugit add -A在整个树上运行

所以对于git 2,答案是:

  • git add .git add -A . 在当前目录中添加新的/修改的/删除的文件
  • git add --ignore-removal . 在当前目录中添加新文件/修改过的文件
  • git add -u . 在当前目录中添加修改/删除的文件
  • 不带点的状况下,添加项目中的全部文件,不管当前目录如何

#5楼

最后,我想我明白了,很是感谢你们。 我但愿这能够增长一些清晰度。

!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)

限制符能够是-u或-A或nil。

Pathspec能够是文件路径或点“。”。 指示当前目录。

有关git如何“添加”的重要背景知识。

  • Git永远不会自动识别以点为前缀的不可见文件(点文件)。 他们甚至从未被列为“未跟踪”。
  • git永远不会添加空文件夹。 他们甚至从未被列为“未跟踪”。 (一种解决方法是向跟踪的文件中添加一个可能不可见的空白文件。)
  • Git状态不会显示子文件夹信息,即未跟踪的文件,除非已跟踪该子文件夹中的至少一个文件。 在此以前,git认为整个文件夹超出范围,称为“空”。 它没有跟踪的项目。
  • 指定filespec ='。 (点)或当前目录不是递归的,除非也指定了-A。 点严格指的是当前目录-它忽略了上下目录。

如今,有了这些知识,咱们能够应用上面的答案。

限制器以下。

  • -u = --update =跟踪文件的子集=>添加=否; 更改=是; 删除=是。 =>若是该项目被跟踪。
  • -A = --all(没有这样的-a,不会产生语法错误)=全部未跟踪/跟踪的文件的超集,除非在Git <2.0中,若是给出了点文件规范,则仅考虑该特定文件夹。 =>若是能够识别该项目,则git add -A将找到并添加它。

pathspec以下。

  • 在Git <2.0中,对于两个限制器(更新和所有),新的默认设置是对整个工做树进行操做,而不是对当前路径进行操做(git <= 1.9),
  • 可是,在v2.0中,能够将操做限制为当前路径:仅添加显式点后缀(在Git <= 1.9中也有效);

git add -A .

git add -u .

总之,个人政策是

  • 1.确保要添加的全部块/文件都处于git状态。
  • 1A。若是因为看不见的文件/文件夹而缺乏任何项目,请分别添加它们。
  • 2.具备良好的gitignore,以便一般仅关注和/或没法识别感兴趣的文件。
  • 3.从仓库的最高层,“ git add -A”添加全部项目。 这适用于全部版本的git。
  • 4.若是须要,从索引中删除全部须要的项目。
  • 6.若是有大错误,请执行“ git reset”以彻底清除索引。
相关文章
相关标签/搜索