最后我想我得到了这个,非常感谢大家。我希望这可以增加更多的清晰度。
!The syntax is git add <limiters> <pathspec> ! Aka git add (nil/-u/-A) (nil/./pathspec)
限制器可以是-u或-A或nil。
Pathspec可以是文件路径或点,'。'指示当前目录。
关于git'如何添加'的重要背景知识。
现在,鉴于这些知识,我们可以应用上面的答案。
限制器如下。
pathspec如下。
git add -A .
git add -u .
总之,我的政策是;
同 的 Git 2.0, git add -A 是默认值: git add . 等于 git add -A . 强> 。
git add -A
git add .
git add <path> 是相同的 ” git add -A <path> “现在,那样 “ git add dir/ “会注意到你从目录中删除的路径 记录删除。 在旧版本的Git中,“ git add <path> “以前忽略了删除。 你可以说 ” git add --ignore-removal <path> “ 至 仅添加添加或修改的路径 <path> ,如果你真的想。
git add <path> 是相同的 ” git add -A <path> “现在,那样 “ git add dir/ “会注意到你从目录中删除的路径 记录删除。 在旧版本的Git中,“ git add <path> “以前忽略了删除。
git add <path>
git add -A <path>
git add dir/
你可以说 ” git add --ignore-removal <path> “ 至 仅添加添加或修改的路径 <path> ,如果你真的想。
git add --ignore-removal <path>
<path>
git add 就好像 git add :/ ( 从顶级git repo文件夹添加所有内容 )。 请注意,git 2.7(2015年11月)将允许您添加名为“ : “! 看到 提交29abb33 (2015年10月25日)by Junio C Hamano( gitster ) 。
git add
git add :/
:
gitster
注意 启动git 2.0(2014年第一季度或第二季度) ,谈论时 的 git add . 强> (工作树中的当前路径),你必须使用' . '在另一个 git add 命令也是如此。
.
这意味着:
“ git add -A . “相当于” git add .; git add -u . “
git add .; git add -u .
(注意额外' . '为 git add -A 和 git add -u )
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 add -u . “当他们在Git 2.0出现之前意味着它。 的 在没有pathspec的情况下运行这些命令时以及在当前目录之外进行本地更改时会发出警告 强> ,因为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出现之前意味着它。
git commit -a
的 在没有pathspec的情况下运行这些命令时以及在当前目录之外进行本地更改时会发出警告 强> ,因为Git 2.0中的行为会有所不同 从今天的版本来看这种情况。
这个答案只适用于 的 Git版本1.x. 强> 。对于Git版本2.x,请参阅其他答案。
的 摘要: 强>
git add -A 阶段 的 所有的变化 强>
git add . 分阶段新文件和修改, 的 没有删除 强>
git add -u 阶段修改和删除, 的 没有新文件 强>
的 详情: 强>
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 的 将 强> 不同):
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
-A选项添加,修改和删除索引条目以匹配工作树。
在GIT 2中 -A 选项现在是默认值。
-A
当一个 . 添加,将更新的范围限制为您当前所在的目录,按照 Git文档
如果不 <pathspec> 在使用-A选项时,将更新整个工作树中的所有文件(旧版本的Git用于限制对当前目录及其子目录的更新)。
<pathspec>
我要补充的一件事是,如果 --interactive 要么 -p 使用模式然后git add将表现得像更新( -u )使用标志而不添加新文件
--interactive
-p
-u
都 git add . 和 git add -A 将在更新版本中暂存所有新的,修改的和删除的文件 git 。
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 无论你从哪里执行命令,都肯定会发生这种变化。
/my-repo
rm rootfile.txt
cd subfolder
希望这可以消除差异。
事情变了 使用Git 2.0:
--ignore-removal
所以对于git 2,答案是:
git add --ignore-removal .
git add . 等于 git add -A . 仅将文件添加到当前和子文件夹的索引中。
git add -A 将文件添加到工作树中所有文件夹的索引中。
P.S。:信息与Git 2.0有关。