Difference between "git add -A" and "git add ."

Difference between “git add -A” and “git add .”

技术背景

在使用Git进行版本控制时,git add 命令用于将工作目录中的文件更改添加到暂存区,而 git add -Agit add . 是常用的两个添加方式,但它们之间存在一些差异。了解这些差异有助于开发者更精准地管理文件更改的暂存操作。

实现步骤

1. 创建测试仓库并初始化

1
2
3
4
5
git init
echo Change me > change-me
echo Delete me > delete-me
git add change-me delete-me
git commit -m "initial"

2. 进行文件更改

1
2
3
echo OK >> change-me
rm delete-me
echo Add me > add-me

3. 查看不同命令的效果

使用 git add .

1
2
git add .
git status

输出结果显示,新文件和修改的文件被添加到暂存区,但删除的文件未被添加。

使用 git add -u

1
2
3
git reset
git add -u
git status

输出结果显示,修改和删除的文件被添加到暂存区,但新文件未被添加。

使用 git add -A

1
2
3
git reset
git add -A
git status

输出结果显示,新文件、修改的文件和删除的文件都被添加到暂存区。

核心代码

以下是完整的测试代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 创建测试仓库并初始化
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
git add .
git status
git reset
git add -u
git status
git reset
git add -A
git status

最佳实践

  • git add .:当你只关心当前目录下的新文件和修改的文件,而不希望删除的文件被自动添加到暂存区时,可以使用此命令。
  • git add -u:如果你只需要处理已经被跟踪的文件的修改和删除,而不添加新文件,可以使用此命令。
  • git add -A:当你希望一次性将所有新文件、修改的文件和删除的文件都添加到暂存区时,使用此命令是最方便的。

常见问题

1. 在Git 2.x版本中,git add .git add -A 有什么区别?

  • 如果位于工作目录的根目录,git add -Agit add . 效果相同。
  • 如果位于工作目录的子目录,git add -A 会添加整个工作目录的所有文件,而 git add . 只会添加当前目录及其子目录的文件。

2. 为什么在Git 2.0之后,git add -Agit add -u 操作范围发生了变化?

从Git 2.0开始,为了与 git commit -a 等命令保持一致,git add -Agit add -u 在没有指定路径时会操作整个工作树,而不是仅当前路径。为了指定只操作当前路径,可以使用 git add -A .git add -u .

3. 如何处理Git忽略的文件?

Git默认不会自动识别以点开头的隐藏文件和空文件夹。如果需要添加这些文件,可以单独使用 git add 命令添加,或者在 .gitignore 文件中调整忽略规则。


Difference between "git add -A" and "git add ."
https://119291.xyz/posts/2025-05-09.difference-between-git-add-a-and-git-add-dot/
作者
ww
发布于
2025年5月9日
许可协议