当前位置:  开发笔记 > 编程语言 > 正文

"git add -A"和"git add"之间的区别.

如何解决《"gitadd-A"和"gitadd"之间的区别.》经验,为你挑选了10个好方法。

该命令git add [--all|-A]似乎与git add ..相同.它是否正确?如果没有,它们有何不同?



1> CB Bailey..:

这个答案只适用于Git的1.x版本.对于Git版本2.x,请参阅其他答案.


摘要:

git add -A分阶段所有变化

git add .分阶段新文件和修改,没有删除

git add -u分阶段修改和删除,没有新文件


详情:

git add -A相当于 git add .; git add -u.

重要的一点git add .是,它会查看工作树,并将所有这些路径添加到分阶段的更改中,如果它们要么已更改,要么是新的而不是被忽略,它不会进行任何"rm"操作.

git add -u查看所有跟踪的文件,并将这些文件的更改分级,如果它们不同或已被删除.它不会添加任何新文件,只会对已经跟踪的文件进行更改.

git add -A 这是两个方便的快捷方式.

您可以使用类似的方法测试差异(请注意,对于Git版本2.x,您的输出git add . git status 不同):

git init
echo Change me > change-me
echo Delete me > delete-me
git add change-me delete-me
git commit -m initial

echo OK >> change-me
rm delete-me
echo Add me > add-me

git status
# Changed but not updated:
#   modified:   change-me
#   deleted:    delete-me
# Untracked files:
#   add-me

git add .
git status

# Changes to be committed:
#   new file:   add-me
#   modified:   change-me
# Changed but not updated:
#   deleted:    delete-me

git reset

git add -u
git status

# Changes to be committed:
#   modified:   change-me
#   deleted:    delete-me
# Untracked files:
#   add-me

git reset

git add -A
git status

# Changes to be committed:
#   new file:   add-me
#   modified:   change-me
#   deleted:    delete-me


`git add*`之间的区别怎么样?
@CharlesBailey,Git真的很喜欢*让事情变得复杂无缘无故.是否有一个**真正的**用例,有人特别需要`git add -u`或`git add .`,这样做,即使考虑到额外的精神税,确保那里',这使他的生活更轻松没有同步问题?我想知道为什么Git不会将`add -u`分成两个单独的命令`add -u1`和`add-u2`,其中一个用于以数字开头的文件,另一个用于以非数字开头的文件
有关信息,在较新版本的git`git add -u`已成为`git add -u:/`,后者参数为路径,允许您使用-u某些目录,`:/`处理整个树.
太糟糕了`git add -A -p`无法正常工作(交互式询问未跟踪的文件)
请更新答案.它应该是:`git add -A:/`或`git add -A .`
什么是git add*?没有描述.

2> Developer..:

这是快速了解的表格:

Git版本1.x: 在此输入图像描述

Git版本2.x: 在此输入图像描述

长形标志:

git add -A 相当于 git add --all

git add -u 相当于 git add --update

进一步阅读:

适合初学者的Git:权威的实用指南

有15分钟,想学习Git?(以互动方式)

http://pcottle.github.io/learnGitBranching/

http://www.wei-wang.com/ExplainGitWithD3/


这并不完全正确,因为`git add .`只会添加当前路径上的新文件.即如果你有一个新的目录`../ foo`,`git add -A`将使它上演,`git add .`则不会.
@Gokul:根据[这篇文章](http://stackoverflow.com/a/14368373/134536),您可以使用`git diff-files -z --diff-filter = M --name-only | xargs -0 git add`仅添加修改后的文件,但不添加新文件或删除.
因此,git add。等效于git add -A。等效于git add“ *”

3> VonC..:

使用Git 2.0,git add -A默认git add .值为:equalsgit add -A ..

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

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

git add就像git add :/(添加顶级git repo文件夹中的所有内容).
请注意,git 2.7(2015年11月)将允许您添加名为" :" 的文件夹!
见Junio C Hamano()提交29abb33(2015年10月25日). gitster


请注意,在谈论(工作树中的当前路径)时,启动git 2.0(2014年第1季度或第2季度git add .),您也必须.在其他git add命令中使用' ' .

这意味着:

" git add -A ."相当于" git add .; git add -u ."

(注意额外' .'为git add -Agit add -u)

因为git add -Agit add -u将在整个工作树上运行(仅启动git 2.0),而不仅仅是在当前路径上运行.

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

当这些命令在没有pathspec的情况下运行时以及在当前目录之外进行本地更改时会发出警告,因为在这种情况下Git 2.0中的行为将与今天的版本不同.


@NickVolynkin那真棒!很高兴看到SO的国际社会按预期工作.供参考:http://ru.stackoverflow.com/a/431840

4> 小智..:

所以从上面的Charles说明中,经过测试,我提出的理解如下:

# For the next commit
$ git add .   # Add only files created/modified to the index and not those deleted
$ git add -u  # Add only files deleted/modified to the index and not those created
$ git add -A  # Do both operations at once, add to all files to the index

此链接也可能有助于了解可能应用这些命令的情况:从Git工作目录中删除已删除的文件.


这在2.0中已不再适用.加.等于为同一路径添加-A,唯一的区别是树中其他路径中是否有新文件

5> K. Kilian Li..:

迟到了,但这个问题也值得更快速的回答.

git add -A

下面两者(与git add --all相同)

git add .

暂存新的+修改过的文件

git add -u

阶段已修改+已删除的文件


您好,如果您只想暂存仅修改过的文件怎么办?你会怎么做?
你好,问题好.据我所知,没有一个简单的标志.. git diff-files -z --diff-filter = M --name-only | xargs -0 git add from - > http://stackoverflow.com/questions/14368093/simpler-way-to-stage-only-modified-files-in-git-not-deleted
实际上它是`git add:/`+`git add -u:/`

6> 0xF..:

用Git 2.0 改变了一些事情:

-A 现在是默认值

现在可以使用旧的行为了 --ignore-removal

git add -u并且git add -A在命令行上没有路径的子目录中对整个树进行操作

所以对于git 2,答案是:

git add .git add -A .在当前目录中添加新/修改/删除的文件

git add --ignore-removal . 在当前目录中添加新/修改的文件

git add -u . 在当前目录中添加已修改/已删除的文件

如果没有点,则无论当前目录如何,都要添加项目中的所有文件


我不认为这是正确的.使用git v2.10.windows.2'git add'返回'没有指定任何内容,没有添加'.'git add -A'添加所有已更改的文件.这表明'-A'不是默认值.

7> simhumileco..:

Git 2.x中:

如果您是直接位于工作目录,然后git add -Agit add .工作没有区别.

如果您位于工作目录的任何子目录中,git add -A将添加整个工作目录中的所有文件,git add .并将添加当前目录中的文件.

就这样.



8> AnneTheAgile..:

最后我想我得到了这个,非常感谢大家.我希望这可以增加更多的清晰度.

!The syntax is
git add  
! Aka
git add (nil/-u/-A) (nil/./pathspec)

限制器可以是-u或-A或nil.

Pathspec可以是文件路径或点,'.' 指示当前目录.

关于git'如何添加'的重要背景知识.

Git不会自动识别不可见文件,前缀为点(dotfiles)的文件.它们甚至从未列为"未跟踪".

git永远不会添加空文件夹.它们甚至从未列为"未跟踪".(解决方法是向跟踪的文件添加一个可能不可见的空白文件.)

Git状态不会显示子文件夹信息,即未跟踪文件,除非跟踪该子文件夹中的至少一个文件.在此之前,git认为整个文件夹超出了范围,一个'空'.它没有跟踪的项目.

指定filespec ='.' (点)或当前目录不是递归的,除非还指定了-A.Dot严格指当前目录 - 它省略了上面和下面找到的路径.

现在,鉴于这些知识,我们可以应用上面的答案.

限制器如下.

-u = --update =跟踪文件的子集=> Add = No; 改变=是; 删除=是.=> iff跟踪项目.

-A = --all(没有这样的-a,它给出了语法错误)=所有未跟踪/跟踪文件的超集,除非在Git <2.0中,其中如果给出了dot filespec,则只考虑该特定文件夹.=>如果项目被识别,git add -A将找到它并添加它.

pathspec如下.

在Git <2.0中,对于两个限制器(更新和全部),新的默认值是在整个工作树上运行,而不是当前路径(git <= 1.9),

但是,在v2.0中,操作可以限制为当前路径:只需添加显式点后缀(在Git中也有效<= 1.9);

-A

-u

总之,我的政策是;

1.确保要添加的任何数据库/文件都以git状态计算.

1A.如果由于不可见的文件/文件夹而丢失任何项目,请单独添加.

2.有一个好的gitignore,所以通常只有感兴趣的文件没有跟踪和/或无法识别.

3.从repo的顶层,"git add -A"添加所有项目.这适用于所有版本的git.

4.如果需要,从索引中删除任何所需的项目.

6.如果有一个大错误,请执行'git reset'以完全清除索引.



9> Alex78191..:

git add .equals git add -A .仅将文件添加到当前和子文件夹的索引中.

git add -A 将文件添加到工作树中所有文件夹的索引中.

PS:信息与Git 2.0有关.



10> 小智..:

两者git add .git add -A都会在较新版本的Git中暂存所有新的,修改的和删除的文件。

区别在于,git add -A暂存属于您工作的Git存储库的“较高,当前和子目录”中的文件。但是,git add .仅执行阶段操作会将文件放在当前目录及其后的子目录中(而不是位于外部的文件,即更高目录)。

这是一个例子:

/my-repo
  .git/
  subfolder/
    nested-file.txt
  rootfile.txt

如果您当前的工作目录是/my-repo,并且您执行rm rootfile.txt,然后是cd subfolder,接着是git add .,那么它将不会暂存已删除的文件。但是,git add -A无论您从何处执行命令,执行操作都一定会登台此更改。

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有