Git添加所有修改、删除和未跟踪的文件?

280
有没有一种方法可以添加所有文件,无论您对它们进行了什么操作,例如删除,未跟踪等等?就像提交一样。我不想每次提交时都要 git addgit rm 所有我的文件,特别是在处理大型项目时。

10个回答

328

尝试:

git add -A

警告:从git 2.0(2013年中期)开始,这将始终整个工作树上暂存文件。
如果你想在当前工作树路径下暂存文件,你需要使用:

git add -A .

更多信息请参见:git add -A 和 git add . 的区别


这对我没有用...我怎么能在这个讨论中展示我的终端输入输出?将我的终端输出复制粘贴为回答到这个讨论中? - Rakib
这是我面临的问题 - https://dev59.com/q2sz5IYBdhLWcg3wsZ8N - 请帮我解决一下,谢谢。 - Rakib
如果你的 Git 版本过旧,这可能也行不通。我在一台装有 Git 1.5.2.5 的服务器上运行脚本时, git add -A 没有起作用。脚本没有报错信息。只有通过命令行才发现 -A 不是可添加的合法选项。 - Eponymous
为什么每次我想提交代码时都要添加文件呢?每次修改文件后都需要将其添加。 - Frade
3
这就是 Git 的工作原理。在提交更改之前,您需要将更改添加到暂存区。例如,您只能将某些文件添加到提交中并为其提供注释,而不是每次都添加所有文件。这里有一个简单易懂的解释,说明了这样做的原因和作用:http://gitready.com/beginner/2009/01/18/the-staging-area.html - Kilanash

79

尝试一下

git add -u

"u"选项表示更新。它将更新仓库并实际删除您在本地副本中已删除的文件。

git add -u [filename]

将一个文件设置为待删除状态。一旦推送,该文件将不再在仓库中。

或者,

git add -A .

等同于

git add .

git add -u .

注意在git add -Agit add -u命令中的额外点号。


警告:从git 2.0(2013年中期)开始,这将始终在整个工作树上暂存文件。
如果要暂存当前工作树路径下的文件,您需要使用:

git add -A .

同时请参见:git add -A 和 git add . 的区别


57
以下答案仅适用于Git版本1.x,但适用于Git版本2.x。
您想使用 git add -A 命令: git add -A 可以暂存所有文件; git add . 可以暂存新文件和修改过的文件,但不包括已删除的文件; git add -u 可以暂存修改过的文件和已删除的文件,但不包括新文件。

1
请注意,上述仅适用于Git 1.x版本。对于Git 2.x版本,git add -A等同于git add .。有关更多讨论,请参见此处 - jdhao

32

git add --all 或者 git add -A 或者 git add -A . 将所有文件加入暂存区

git add . 将新增和修改的文件加入暂存区,但不包括被删除的文件

git add -u 将修改和删除的文件加入暂存区,但不包括新添加的文件

git commit -a 表示执行命令 git add -ugit commit -m "message"

执行该命令后,请按以下步骤操作:

  1. 按下 i
  2. 输入您的消息
  3. 按下 esc
  4. 输入 :wq
  5. 按下 enter

git add <要加入暂存区的文件列表> 添加指定的文件

git add *.txt 在当前目录中添加所有的 txt 文件

git add docs/*/txt 添加 docs 目录下所有的 txt 文件

git add docs/ 添加 docs 目录下所有的文件

git add "*.txt" 或者 git add '*.txt' 添加整个项目中的所有文件


13

我不确定它是否会添加已删除的文件,但是从根目录运行git add .将会添加所有未被跟踪的文件。


请参考我的答案,了解如何添加已删除的文件。 - Matt Kneiser

6
对于较新版本的Git:
我尝试使用git add -A命令,然后出现以下提示:

警告:从树的子目录中执行“git add --all(或-A)”而没有路径参数的行为将在Git 2.0中更改,并且不应再使用。要添加整个树的内容,请运行:

git add --all :/(或git add -A :/

要将命令限制为当前目录,请运行:

git add --all . (或git add -A .

在当前的Git版本中,该命令被限制为当前目录。

然后,我尝试下面这个命令,它可行
git add --all :/

5
我编写了G2项目,为命令行git用户提供友好的环境。
请从Github上获取该项目 - G2https://github.com/orefalo/g2

该项目拥有许多方便的命令,其中一个就是您正在寻找的: freeze

freeze - 冻结存储库中的所有文件(添加、删除、修改),将其加入暂存区,以便在下次提交时将其包含。也可通过指定路径参数来执行。

5

这是我在任何bash中的备选方案:

$ git status -s|awk '{ print $2 }'|xargs git add

重置密码

$ git status -s|awk '{ print $2 }'|xargs git reset HEAD

4

我使用以下命令将所有修改和新创建的文件添加到暂存区,但不包括.gitignore中列出的文件:

git add $(git ls-files -mo --exclude-standard)

($()语法适用于bash shell)。我猜命令行选项-mod也应该添加已删除的文件... 或者,如果您有带有嵌入空格的文件名,则以下单行代码可以解决问题:

git ls-files -z --deleted --modified --others --exclude-standard | xargs -0 git add

3

从Git 2.0版本开始的文档中:

要为整个树添加内容,请运行:

git add --all :/

或者
git add -A :/

要将命令限制在当前目录中运行,请执行以下操作:

git add --all .

或者
git add -A .

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接