命令git add [--all|-A]似乎与git add .。它是否正确?如果没有,它们有何不同?

答案

这个答案仅适用于Git version 1.x。对于Git 2.x版本,请参见其他答案。


Summary:

  • git add -A阶段all changes

  • git add .分会新文件和修改,without deletions(在当前目录及其子目录中)。

  • git add -u阶段修改和删除,without new files


Detail:

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

来自: stackoverflow.com