一尘不染

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

javascript

该命令git add [--all|-A]似乎与 相同git add .。这个对吗?如果不是,它们有何不同?


阅读 160

收藏
2022-01-18

共2个答案

一尘不染

此答案仅适用于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
2022-01-18
一尘不染

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
2022-01-18