`git add .`和`git add -u`有什么区别?

TK.*_*TK. 69 git git-add

我假设两者都以同样的方式工作.两者都将每个文件添加到索引.但我似乎错了.

  • git add .和之间有什么区别git add -u

Von*_*onC 72

它是这里提到的git陷阱之一(在Git 2.0之前).

git add . 只添加那里的内容,而不是删除的内容(如果被跟踪).

git add .
git commit
git status
//hey! why didn't it commit my deletes?, Oh yeah, silly me
git add -u .
git commit --amend
Run Code Online (Sandbox Code Playgroud)

git add -A 会照顾这两个步骤......


使用Git 2.0,git add -A是默认的.

git add <path>与" git add -A <path>"现在相同,因此" git add dir/"将注意到您从目录中删除的路径并记录删除.
在旧版本的Git中," git add <path>"用于忽略删除.

如果你真的想要,你可以说" git add --ignore-removal <path>"只添加添加或修改的路径<path>.


警告(git1.8.3 2013年4月,即将发布的git2.0).
我修改了我的答案git add -u .,而不是git add -u.:

git add -u将在Git 2.0中的整个树上运行,以与" git commit -a"和其他命令保持一致.
因为没有机制使" git add -u"表现为" git add -u .",所以对于那些习惯于" git add -u"(没有pathspec)的人来说,仅为当前子目录中的路径更新索引以开始训练他们的手指明确地说" git add -u ."是很重要的.当他们在Git 2.0出现之前意味着它.

正如我在" e "中提到的那样

  • 谢谢你的回答和一个例子."嘿!" 线真的帮助我. (5认同)

Ben*_*ier 21

就像手册中说的那样:git add .将添加当前目录中的所有文件,同时git add -u .只添加已被跟踪的文件.

  • `add -u`也会删除. (9认同)

Der*_*ley 12

git add documentaiton

git add . 
Run Code Online (Sandbox Code Playgroud)

添加当前目录中的所有文件

git add -u 
Run Code Online (Sandbox Code Playgroud)

仅更新当前正在跟踪的文件.