乐闻世界logo
搜索文章和话题

Git add a 和 git add 有什么区别?

9 个月前提问
5 个月前修改
浏览次数45

6个答案

1
2
3
4
5
6

git add -Agit add . 在许多情况下的表现是相似的,但它们在某些特定的git版本和情境下会有不同的行为。下面是它们的主要区别:

  • git add -A:这个命令是 git add --all 的缩写,它会添加所有在工作目录中的变更到暂存区(staging area),包括文件的添加、修改和删除。这个操作会影响整个仓库。

  • git add .:这个命令只会添加当前目录及其子目录中的新文件和修改过的文件到暂存区,并不会添加删除的文件。这个操作只影响当前目录和子目录。

在较新的Git版本中(比如从2.0版本开始),git add .git add -A 在执行时几乎是等效的,因为 git add . 也会包括删除的文件。但是,git add . 的作用范围仅限于当前目录,而 git add -A 可以在仓库中任何位置执行,它会影响整个仓库。

简而言之,如果你想确保包括所有类型的变更(添加、修改、删除)并且希望这种添加操作适用于整个仓库,使用 git add -A 是比较安全的选择。如果你只关心当前目录及其子目录的变更,可以使用 git add .。在使用时,确保理解你正在使用的Git版本的行为,因为这可能影响命令的准确行为。

2024年6月29日 12:07 回复

此答案仅适用于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 有所不同):

shell
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
2024年6月29日 12:07 回复

Git 版本 1.x

命令

新文件

修改文件

已删除的文件

描述

git add -A

✔️

✔️

✔️

暂存所有(新的、修改的、删除的)文件

git add .

✔️

✔️

仅在当前文件夹中暂存新文件和修改后的文件

git add -u

✔️

✔️

仅阶段修改和删除的文件

Git 版本 2.x

命令

新文件

修改文件

已删除的文件

描述

git add -A

✔️

✔️

✔️

暂存所有(新的、修改的、删除的)文件

git add .

✔️

✔️

✔️

暂存当前文件夹中的所有(新的、修改的、删除的)文件

git add --ignore-removal .

✔️

✔️

仅暂存新文件和修改后的文件

git add -u

✔️

✔️

仅阶段修改和删除的文件

长格式标志:

  • git add -A相当于git add --all
  • git add -u相当于git add --update

进一步阅读:

2024年6月29日 12:07 回复

对于Git 2.0,git add -A默认值是:git add .equalsgit add -A .

git add <path>与现在的“ ”相同git add -A <path>,这样“ git add dir/”就会注意到您从目录中删除的路径并记录删除情况。
在旧版本的 Git 中,“ git add <path>”忽略了删除。

如果您确实愿意,可以说“ git add --ignore-removal <path>”仅在 中添加添加或修改的路径。<path>

git add -A就像git add :/添加顶部 git repo 文件夹中的所有内容)。
请注意,git 2.7(2015 年 11 月)将允许您添加名为“ :”的文件夹!
请参阅Junio C Hamano ( )的提交 29abb33(2015 年 10 月 25 日)。 gitster


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

这意味着:

git add -A .”相当于“ git add .; git add -u .

(注意和的额外“ .” )git add -A``git add -u

因为git add -Aor会在整个工作树上git add -u操作(仅从 git 2.0 开始),而不仅仅是在当前路径上。

这些命令将对Git 2.0 中的整个树进行操作,以与“ git commit -a”和其他命令保持一致。因为没有机制可以使“ git add -u”表现得像“ git add -u .”,所以对于那些习惯“ git add -u”(没有路径规范)仅更新当前子目录中路径的索引的人来说,开始训练他们的手指明确地说“是很重要的” git add -u .“在 Git 2.0 到来之前他们就是这么想的。

**当这些命令在没有路径规范的情况下运行以及在当前目录之外进行本地更改时,会发出警告,**因为在这种情况下,Git 2.0 中的行为将与今天的版本不同。

2024年6月29日 12:07 回复

根据查尔斯的指示,经过测试,我提出的理解如下:

shell
# 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

这篇博文也可能有助于了解在什么情况下可以应用这些命令:从 Git 工作目录中删除已删除的文件

在 2.0 中不再如此。add .等于add -A同一路径,唯一的区别是树的其他路径中是否有新文件

2024年6月29日 12:07 回复

git add -Agit add . 在许多情况下的表现是相似的,但它们在某些特定的git版本和情境下会有不同的行为。下面是它们的主要区别:

  • git add -A:这个命令是 git add --all 的缩写,它会添加所有在工作目录中的变更到暂存区(staging area),包括文件的添加、修改和删除。这个操作会影响整个仓库。
  • git add .:这个命令只会添加当前目录及其子目录中的新文件和修改过的文件到暂存区,并不会添加删除的文件。这个操作只影响当前目录和子目录。

在较新的Git版本中(比如从2.0版本开始),git add .git add -A 在执行时几乎是等效的,因为 git add . 也会包括删除的文件。但是,git add . 的作用范围仅限于当前目录,而 git add -A 可以在仓库中任何位置执行,它会影响整个仓库。

简而言之,如果你想确保包括所有类型的变更(添加、修改、删除)并且希望这种添加操作适用于整个仓库,使用 git add -A 是比较安全的选择。如果你只关心当前目录及其子目录的变更,可以使用 git add .。在使用时,确保理解你正在使用的Git版本的行为,因为这可能影响命令的准确行为。

2024年6月29日 12:07 回复

你的答案