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


75

我以为两者的工作方式相同。两者都将每个文件添加到索引。但是我似乎错了。

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

Answers:


77

它是这里提到的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

git add -A 将照顾两个步骤...


对于Git 2.0,它git add -A是default

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

如果确实要,您可以说“ git add --ignore-removal <path>”以仅在中添加添加或修改的路径<path>


警告(2013年4月git1.8.3,即将发布的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
感谢您的回答和示例。“嘿!” 线真的对我有帮助。
传统知识。

@TK:是的,Benjol(stackoverflow.com/users/11410/benjol)的例子很好。
VonC'2

看来我们不需要将.(pathspec)与Git 2.x一起使用。它可以在我测试时找到。
Sanghyun Lee

同样,从Git 2.0开始,git add .将所有更改添加到索引,因为-A默认情况下为option。检查此答案stackoverflow.com/a/26343584/524588
Sanghyun Lee 2015年

@Sangdol谢谢您的提醒。我已经相应地更新了答案。
VonC

23

就像手册中所说:git add .将所有文件添加到当前目录中,而git add -u .只会添加已经被跟踪的文件。


10
add -u也将分阶段删除。
CB Bailey 2010年

仅在跟踪已删除文件的情况下;)
Benjamin Bannier 2010年

add -u是commit-等价的(在其操作的文件中)。
Lakshman Prasad

Bannier:如果未跟踪已删除的文件,那么暂存区中没有什么要删除的吗?
CB Bailey 2010年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.