命令 git add [--all|-A] 似乎与 git add . 相同 . 它是否正确?如果没有,它们有何不同?
git add [--all|-A]
git add .
此答案仅适用于 Git version 1.x . 对于Git版本2.x,请参阅其他答案 .
Summary:
git add -A 阶段 all changes
git add -A
git add . 分阶段新文件和修改, without deletions
git add -u 阶段修改和删除, without new files
git add -u
Detail:
git add -A 相当于 git add .; git add -u .
git add .; git add -u
关于 git add . 的重要一点是它查看工作树并将所有这些路径添加到分阶段更改中(如果它们已更改或是新的且未被忽略),它不会进行任何'rm'操作 .
git add -u 查看所有已跟踪的文件,并将这些文件的更改分级,如果它们不同或已被删除 . 它不会添加任何新文件,只会对已经跟踪的文件进行更改 .
git add -A 是执行这两者的便捷捷径 .
您可以使用类似的方法测试差异(请注意,对于Git版本2.x, git add . git status will 的输出不同):
git status
git init echo Change me > change-me echo Delete me > delete-me git add change-me delete-me git commit -m initial echo OK >> change-me rm delete-me echo Add me > add-me git status # Changed but not updated: # modified: change-me # deleted: delete-me # Untracked files: # add-me git add . git status # Changes to be committed: # new file: add-me # modified: change-me # Changed but not updated: # deleted: delete-me git reset git add -u git status # Changes to be committed: # modified: change-me # deleted: delete-me # Untracked files: # add-me git reset git add -A git status # Changes to be committed: # new file: add-me # modified: change-me # deleted: delete-me
这是快速了解的表格:
Git Version 1.x :
Git Version 2.x :
长形标志:
git add -A 相当于 git add --all
git add --all
git add -u 相当于 git add --update
git add --update
Further reading:
Git for beginners: The definitive practical guide
Got 15 minutes and want to learn Git? (in Interactive Way)
http://pcottle.github.io/learnGitBranching/
http://www.wei-wang.com/ExplainGitWithD3/
随着Git 2.0, git add -A is default: git add . equals git add -A . .
git add <path>现在与“git add -A <path>”相同,因此“git add dir /”会注意到您从目录中删除的路径并记录删除 . 在旧版本的Git中,“git add <path>”用于忽略删除 . 如果你真的想要,你可以说“git add --ignore-removal <path>”只在<path>中添加添加或修改的路径 .
git add 就像 git add :/ (add everything from top git repo folder) .请注意,git 2.7(2015年11月)将允许您添加名为“ : ”的文件夹!见Junio C Hamano (gitster)(2015年10月25日)Junio C Hamano (gitster) .
git add
git add :/
:
注意starting git 2.0 (Q1 or Q2 2014),在谈到 git add . (工作树中的当前路径)时,您必须在其他 git add 命令中使用' . ' .
.
这意味着:
“git add -A . ”相当于“git add . ; git add -u” .
(注意 git add -A 和 git add -u 的额外' . ')
因为 git add -A 或 git add -u 将在 entire working tree 上运行(仅启动git 2.0),而不仅仅是在当前路径上运行 .
这些命令将在Git 2.0中的整个树上运行,以与“git commit -a”和其他命令保持一致 . 因为没有机制让“git add -u”表现得好像“git add -u . ”,对于那些习惯于“git add -u”(没有pathspec)更新索引的人来说非常重要在当前子目录中开始训练他们的手指明确地说“git add -u” . 当他们在Git 2.0出现之前意味着它 . 在没有pathspec的情况下运行这些命令时以及当前目录之外的本地更改时会发出警告,因为在这种情况下Git 2.0中的行为将与今天的版本不同 .
所以从上面的Charles说明中,经过测试,我提出的理解如下:
# For the next commit $ git add . # add to index only files created/modified and not those deleted $ git add -u # add to index only files deleted/modified and not those created $ git add -A # do both operation at once, add to index all files
此链接也可能有助于了解可以应用这些命令的情况:Removing Deleted Files from your Git Working Directory .
迟到了,但这个问题也值得更快速的回答 .
下面两者(与git add --all相同)
暂存新修改的文件
阶段修改了已删除的文件
Things changed与Git 2.0:
-A 现在是默认值
-A
旧行为现在可用 --ignore-removal
--ignore-removal
git add -u 和 git add -A 在命令行上没有路径的子目录中对整个树进行操作
所以对于git 2,答案是:
git add . 和 git add -A . 在当前目录中添加新/已修改/已删除的文件
git add -A .
git add --ignore-removal . 在当前目录中添加新/已修改的文件
git add --ignore-removal .
git add -u . 在当前目录中添加了已修改/已删除的文件没有点的
git add -u .
,无论当前目录如何,都要添加项目中的所有文件
在Git 2.x中:
如果您直接位于工作目录,那么 git add -A 和 git add . 无差别地工作 .
如果您在工作目录的任何子目录中, git add -A 将添加整个工作目录中的所有文件, git add . 将添加当前目录中的文件 .
就这样 .
最后我想我得到了这个,非常感谢大家 . 我希望这可以增加一些清晰度 .
!The syntax is git add <limiters> <pathspec> ! Aka git add (nil/-u/-A) (nil/./pathspec)
限制器可以是-u或-A或nil .
Pathspec可以是文件路径或点,' . '指示当前目录 .
关于git'如何添加'的重要背景知识 .
不可见的文件,以点为前缀的文件(dotfiles)永远不会被Git自动识别 . 它们甚至从未被列为'untracked' .
git永远不会添加空文件夹 . 它们甚至从未被列为'untracked' . (解决方法是在跟踪的文件中添加一个可能不可见的空白文件 . )
Git状态不会显示子文件夹信息,即未跟踪文件,除非跟踪该子文件夹中的至少一个文件 . 在此之前,git认为整个文件夹超出范围,la 'empty' . 它没有跟踪的项目 .
除非还指定了-A,否则指定filespec = '.'(点)或当前目录不是递归的 . Dot严格指当前目录 - 它省略了上面和下面找到的路径 .
现在,鉴于这些知识,我们可以应用上面的答案 .
限制器如下 .
-u = --update =跟踪文件的子集=>添加=否;改变=是;删除=是 . => iff跟踪项目 .
-A = --all(没有这样的-a,它给出语法错误)=所有未跟踪/跟踪文件的超集,除非在Git <2.0中,其中如果给出了dot filespec,则只考虑该特定文件夹 . =>如果项目被识别,git add -A将找到并添加它 .
pathspec如下 .
在Git <2.0中,对于两个限制器(更新和全部),新的默认值是在整个工作树上运行,而不是当前路径(git <= 1.9),
但是,在v2.0中,操作可以限制为当前路径:只需添加显式点后缀(在Git中也有效<= 1.9);
总之,我的政策是;
1.确保要添加的任何数据库/文件都以git状态计算 .
1A . 如果由于不可见的文件/文件夹而丢失任何项目,请单独添加 .
2.有一个好的gitignore,所以通常只有感兴趣的文件没有跟踪和/或无法识别 .
3.从仓库的顶层,"git add -A"添加所有项目 . 这适用于所有版本的git .
4.如果需要,从索引中删除任何所需的项目 .
6.如果有大错误,请'git reset'完全清除索引 .
git add . equals git add -A . 仅将文件添加到当前和子文件夹的索引中 .
git add -A 将文件添加到工作树中所有文件夹的索引中 .
P.S . :信息与Git 2.0有关 .
-A选项添加,修改和删除索引条目以匹配工作树 .
在GIT 2中, -A 选项现在是默认选项 .
添加 . 时,会将更新范围限制为您当前所在的目录,具体为Git documentation
如果在使用-A选项时未给出<pathspec>,则更新整个工作树中的所有文件(旧版本的Git用于限制对当前目录及其子目录的更新) .
我要添加的一件事是,如果使用 --interactive 或 -p 模式,那么git add将表现得好像使用了更新( -u )标志而没有添加新文件
--interactive
-p
-u
10 回答
此答案仅适用于 Git version 1.x . 对于Git版本2.x,请参阅其他答案 .
Summary:
git add -A
阶段 all changesgit add .
分阶段新文件和修改, without deletionsgit add -u
阶段修改和删除, without new filesDetail:
git add -A
相当于git add .; git add -u
.关于
git add .
的重要一点是它查看工作树并将所有这些路径添加到分阶段更改中(如果它们已更改或是新的且未被忽略),它不会进行任何'rm'操作 .git add -u
查看所有已跟踪的文件,并将这些文件的更改分级,如果它们不同或已被删除 . 它不会添加任何新文件,只会对已经跟踪的文件进行更改 .git add -A
是执行这两者的便捷捷径 .您可以使用类似的方法测试差异(请注意,对于Git版本2.x,
git add .
git status
will 的输出不同):这是快速了解的表格:
Git Version 1.x :
Git Version 2.x :
长形标志:
git add -A
相当于git add --all
git add -u
相当于git add --update
Further reading:
Git for beginners: The definitive practical guide
Got 15 minutes and want to learn Git? (in Interactive Way)
http://pcottle.github.io/learnGitBranching/
http://www.wei-wang.com/ExplainGitWithD3/
随着Git 2.0, git add -A is default: git add . equals git add -A . .
git add
就像git add :/
(add everything from top git repo folder) .请注意,git 2.7(2015年11月)将允许您添加名为“
:
”的文件夹!见Junio C Hamano (gitster)(2015年10月25日)Junio C Hamano (gitster) .
注意starting git 2.0 (Q1 or Q2 2014),在谈到 git add . (工作树中的当前路径)时,您必须在其他
git add
命令中使用'.
' .这意味着:
(注意
git add -A
和git add -u
的额外'.
')因为
git add -A
或git add -u
将在 entire working tree 上运行(仅启动git 2.0),而不仅仅是在当前路径上运行 .所以从上面的Charles说明中,经过测试,我提出的理解如下:
此链接也可能有助于了解可以应用这些命令的情况:Removing Deleted Files from your Git Working Directory .
迟到了,但这个问题也值得更快速的回答 .
下面两者(与git add --all相同)
暂存新修改的文件
阶段修改了已删除的文件
Things changed与Git 2.0:
-A
现在是默认值旧行为现在可用
--ignore-removal
git add -u
和git add -A
在命令行上没有路径的子目录中对整个树进行操作所以对于git 2,答案是:
git add .
和git add -A .
在当前目录中添加新/已修改/已删除的文件git add --ignore-removal .
在当前目录中添加新/已修改的文件git add -u .
在当前目录中添加了已修改/已删除的文件没有点的
,无论当前目录如何,都要添加项目中的所有文件
在Git 2.x中:
如果您直接位于工作目录,那么
git add -A
和git add .
无差别地工作 .如果您在工作目录的任何子目录中,
git add -A
将添加整个工作目录中的所有文件,git add .
将添加当前目录中的文件 .就这样 .
最后我想我得到了这个,非常感谢大家 . 我希望这可以增加一些清晰度 .
限制器可以是-u或-A或nil .
Pathspec可以是文件路径或点,' . '指示当前目录 .
关于git'如何添加'的重要背景知识 .
不可见的文件,以点为前缀的文件(dotfiles)永远不会被Git自动识别 . 它们甚至从未被列为'untracked' .
git永远不会添加空文件夹 . 它们甚至从未被列为'untracked' . (解决方法是在跟踪的文件中添加一个可能不可见的空白文件 . )
Git状态不会显示子文件夹信息,即未跟踪文件,除非跟踪该子文件夹中的至少一个文件 . 在此之前,git认为整个文件夹超出范围,la 'empty' . 它没有跟踪的项目 .
除非还指定了-A,否则指定filespec = '.'(点)或当前目录不是递归的 . Dot严格指当前目录 - 它省略了上面和下面找到的路径 .
现在,鉴于这些知识,我们可以应用上面的答案 .
限制器如下 .
-u = --update =跟踪文件的子集=>添加=否;改变=是;删除=是 . => iff跟踪项目 .
-A = --all(没有这样的-a,它给出语法错误)=所有未跟踪/跟踪文件的超集,除非在Git <2.0中,其中如果给出了dot filespec,则只考虑该特定文件夹 . =>如果项目被识别,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'完全清除索引 .
git add .
equalsgit add -A .
仅将文件添加到当前和子文件夹的索引中 .git add -A
将文件添加到工作树中所有文件夹的索引中 .P.S . :信息与Git 2.0有关 .
-A选项添加,修改和删除索引条目以匹配工作树 .
在GIT 2中,
-A
选项现在是默认选项 .添加
.
时,会将更新范围限制为您当前所在的目录,具体为Git documentation我要添加的一件事是,如果使用
--interactive
或-p
模式,那么git add将表现得好像使用了更新(-u
)标志而没有添加新文件