问题

命令git add [--all|-A]似乎与git add .相同.这是正确的吗?如果没有,它们有什么不同?

  最佳答案

这个答案只适用于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
 

  相同标签的其他问题

gitgit-add