【问题标题】:What's the difference between `git add .` and `git add -u`?`git add .` 和 `git add -u` 有什么区别?
【发布时间】:2011-01-12 12:31:34
【问题描述】:

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

  • git add .git add -u 有什么区别?

【问题讨论】:

    标签: git git-add


    【解决方案1】:

    如手册所说:git add . 将添加当前目录中的所有文件,而git add -u . 将仅添加已被跟踪的文件。

    【讨论】:

    • add -u 也会进行删除。
    • 仅在已删除的文件被跟踪时;)
    • add -u 是 commit -a 的等价物,有点(在它操作的文件中)。
    • Bannier:如果删除的文件没有被跟踪,那么暂存区就没有什么可以删除的了吗?
    【解决方案2】:

    它是 git 陷阱之一mentioned here(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 is default

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

    你可以说“git add --ignore-removal <path>”到 如果你真的想的话,只在<path> 中添加添加或修改的路径。


    警告 (git1.8.3 April 2013, for upcoming 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”(没有路径规范)的人来说很重要,只为当前子目录中的路径更新索引,以便在 Git 2.0 到来之前开始训练他们的手指明确说出“git add -u .”。

    正如我在“e”中提到的

    【讨论】:

    • 感谢您的回答和示例。 “嘿!”线路真的对我有帮助。
    • @TK:是的,Benjol(stackoverflow.com/users/11410/benjol)'s 的例子很好。
    • 看来我们不需要将.(pathspec) 与 Git 2.x 一起使用。我测试时发现它有效。
    • 此外,从 Git 2.0 开始,git add . 将所有更改添加到索引,因为 -A 选项是默认选项。检查这个答案stackoverflow.com/a/26343584/524588
    • @Sangdol 谢谢你的提醒。我已经相应地更新了答案。
    【解决方案3】:

    git add documentaiton

    git add . 
    

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

    git add -u 
    

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

    【讨论】:

    • 也许涵盖了 Git 2.0 和之前的 Git 版本之间的差异?
    猜你喜欢
    • 2013-02-07
    • 2018-07-09
    • 1970-01-01
    • 2012-06-13
    • 2020-08-11
    • 2021-08-29
    • 2010-10-09
    相关资源
    最近更新 更多