What's the difference between `git add .` and `git add -u`?
Solution 1
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"
Solution 2
Like the manual says: git add .
will add all files in the current directory, whereas git add -u .
will only add those already being tracked.
Solution 3
git add .
add all files from the current directory
git add -u
only update files currently being tracked.
Comments
-
TK. almost 2 years
I was assuming that both work in the same way. Both add every file onto index. But I seem wrong.
- What's the difference between
git add .
andgit add -u
?
- What's the difference between
-
CB Bailey about 14 years
add -u
will also stage deletions. -
Benjamin Bannier about 14 yearsonly if the deleted file was tracked ;)
-
lprsd about 14 yearsadd -u is the commit -a equivalent, sort of(in files it operates on).
-
CB Bailey about 14 yearsBannier: If the deleted file wasn't tracked then there's nothing to be deleted from the staging area anyway?
-
TK. about 14 yearsThanks for your answer and an example. The "hey!" line really helps me.
-
VonC about 14 years@TK: yes, Benjol (stackoverflow.com/users/11410/benjol)'s example is a good one.
-
Sanghyun Lee almost 9 yearsIt seems we don't need to put the
.
(pathspec) with Git 2.x. It works find when I tested. -
Sanghyun Lee almost 9 yearsAlso, from Git 2.0,
git add .
adds all changes to index as-A
option is default. Check this answer stackoverflow.com/a/26343584/524588 -
VonC almost 9 years@Sangdol Thank you for this reminder. I have updated the answer accordingly.
-
Salvador Valencia about 6 yearsVery helpful thanks. Unfortunately this is bad design. The property -u should have become the update command all by its own. Laziness? Mountain of technical debt?
-
Peter Mortensen over 4 yearsPerhaps cover differences between Git 2.0 and versions of Git before that?