What’s the difference between `git add .` and `git add -u`?

It is one of the git gotchas mentioned here (pre Git 2.0).

git add . only adds what is there, not what has been deleted (if tracked).

git add .
git commit
git status
//hey! why didn't it commit my deletes?, Oh yeah, silly me
git add -u .
git commit --amend

git add -A would take care of both steps…


With Git 2.0, git add -A is default.

git add <path> is the same as “git add -A <path>” now, so that
git add dir/” will notice paths you removed from the directory and
record the removal.
In older versions of Git, “git add <path>” used to ignore removals.

You can say “git add --ignore-removal <path>” to
add only added or modified paths in <path>, if you really want to.


Warning (git1.8.3 April 2013, for upcoming git2.0).
I have modified my answer to say git add -u ., instead of git add -u.:

git add -u will operate on the entire tree in Git 2.0 for consistency with “git commit -a” and other commands.
Because there will be no mechanism to make “git add -u” behave as “git add -u .“, it is
important for those who are used to “git add -u” (without pathspec) updating the index only for paths in the current subdirectory to start training their fingers to explicitly say “git add -u .” when they mean it before Git 2.0 comes.

As I mentioned in “e

Leave a Comment