命令git add [--all|-A]
似乎与git add .
相同。它是否正确?如果没有,它们有何不同?
答案 0 :(得分:3906)
此答案仅适用于 Git版本1.x 。对于Git版本2.x,请参阅其他答案。
<强>要点:强>
git add -A
阶段所有更改
git add .
暂存新文件和修改,无删除
git add -u
进行修改和删除,没有新文件
<强>详情:强>
git add -A
相当于git add .; git add -u
。
关于git add .
的重要一点是,它会查看工作树并将所有这些路径添加到分阶段更改中(如果它们已更改或是新的且未被忽略),它不会进行任何“rm”操作
git add -u
会查看所有已跟踪的文件,并将这些文件的更改分级,如果这些文件不同或已被删除。它不会添加任何新文件,只会对已经跟踪的文件进行更改。
git add -A
是执行这两种操作的便捷捷径。
您可以使用类似的方式测试差异(请注意,对于Git版本2.x,git add .
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
答案 1 :(得分:784)
以下是快速了解的表格:
Git版本1.x :
Git版本2.x :
长篇标志:
git add -A
相当于git add --all
git add -u
相当于git add --update
进一步阅读:
答案 2 :(得分:157)
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月)将允许您添加名为“:
”的文件夹!
请commit 29abb33查看Junio C Hamano (gitster
)(2015年10月25日)。
请注意starting git 2.0 (Q1 or Q2 2014),在谈到 git add .
(工作树中的当前路径)时,您必须在另一个{.
中使用git add
'{ 1}}命令。
这意味着:
“
git add -A .
”相当于“git add .; git add -u .
”
(请注意.
和git add -A
的额外“git add -u
”
因为git add -A
或git 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 .
”。在没有pathspec的情况下运行这些命令并在当前目录之外进行本地更改时会发出警告,因为Git 2.0中的行为会有所不同 在这种情况下从今天的版本开始。
答案 3 :(得分:129)
从Charles' instructions开始,经过测试,我的建议理解如下:
# For the next commit
$ git add . # Add only files created/modified to the index and not those deleted
$ git add -u # Add only files deleted/modified to the index and not those created
$ git add -A # Do both operations at once, add to all files to the index
此博客文章也可能有助于了解这些命令可能应用于何种情况: Removing Deleted Files from your Git Working Directory 。
答案 4 :(得分:34)
更简洁的快速回答:
git add -A
git add .
git add -u
答案 5 :(得分:26)
-A
现在是默认--ignore-removal
git add -u
和git add -A
位于命令行上没有路径的子目录中,对整个树进行操作因此,对于git 2,答案是:
git add .
和git add -A .
在当前目录中添加新/已修改/已删除的文件git add --ignore-removal .
在当前目录中添加新/修改过的文件git add -u .
在当前目录中添加已修改/已删除的文件答案 6 :(得分:23)
在 Git 2.x :
如果您直接位于工作目录,那么git add -A
和git add .
可以正常工作。
如果您位于工作目录的任何子目录中,git add -A
将添加整个工作目录中的所有文件,并{{1将添加当前目录中的文件。
就是这样。
答案 7 :(得分:11)
最后我想我得到了这个,非常感谢大家。我希望这可以增加一些清晰度。
!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)
限制器可能是-u或-A或nil。
Pathspec可能是文件路径或点,&#39;。&#39;指示当前目录。
关于git&#39;添加&#39;。
的重要背景知识现在,鉴于这些知识,我们可以应用上述答案。
限制因素如下。
pathspec如下。
git add -A .
git add -u .
总之,我的政策是;
答案 8 :(得分:9)
git add .
等于git add -A .
仅将文件添加到当前和子文件夹的索引中。
git add -A
将文件添加到工作树中所有文件夹的索引中。
P.S。:信息与Git 2.0有关。
答案 9 :(得分:3)
-A选项添加,修改和删除索引条目以匹配工作树。
在GIT 2中,-A
选项现在是默认选项。
.
并将更新范围限制为您当前所在的目录时
如果在使用-A选项时未给出
<pathspec>
,则将更新整个工作树中的所有文件(Git的旧版本用于将更新限制为当前目录及其子目录)。
我要添加的一件事是,如果使用--interactive
或-p
模式,则git add的行为就像使用了update(-u
)标志而不添加新标志一样文件
答案 10 :(得分:2)
git add .
和git add -A
都将在git
的较新版本中暂存所有新文件,已修改文件和已删除文件。
区别在于git add -A
在属于您的git存储库的“更高,最新和子目录”中暂存文件。但是执行git add .
仅在当前目录及其后的子目录中暂存文件(而不是位于外部目录(即更高目录)中的文件)。
这是一个例子:
/my-repo
.git/
subfolder/
nested-file.txt
rootfile.txt
如果您当前的工作目录是/my-repo
,并且您执行了rm rootfile.txt
,然后是cd subfolder
,然后是git add .
,那么它将不会暂存已删除的文件。但是无论您从何处执行命令,执行git add -A
无疑都可以进行此更改。
希望这可以清除差异。
答案 11 :(得分:0)
描述每个标志的作用很有用。使用bit之类的CLI,您可以在键入时访问标志说明。