git add
是 Git 版本控制系统中最基础且最重要的命令之一。它的主要作用是将工作目录中文件的当前状态(修改、新增、删除)添加到暂存区。
核心概念:
- 工作目录: 你在电脑上实际看到和编辑的文件。
- 暂存区: 一个中间区域(想象成一个准备区),用于临时存放你打算在下一次提交中包含的更改。它是
.git
目录下的一个特殊文件(索引文件)。 - 仓库: 存储项目历史记录的地方(
.git
目录)。
git add
就是连接 工作目录 和 暂存区 的桥梁。
主要用途
- 准备提交: 选择性地将你希望包含在下一次提交中的更改放入暂存区。提交只包含暂存区的内容。
- 标记冲突解决: 当你解决了合并冲突后,需要使用
git add
来标记冲突文件为已解决状态。 - 跟踪新文件: 让 Git 开始跟踪一个之前未被跟踪的新文件(需要先
add
才能commit
)。
常用语法和选项
-
git add <file>...
- 添加一个或多个指定文件或目录到暂存区。
- 示例:
git add index.html
- 添加单个文件index.html
git add src/ styles/
- 添加src
和styles
目录下的所有更改git add file1.txt file2.js
- 添加多个特定文件
-
git add .
- 添加当前目录及其所有子目录下的所有更改(修改、新增)到暂存区。
- 注意: 它不会添加被
.gitignore
文件忽略的文件,也不会添加工作目录中被删除的文件(需要使用git add -u
或git add -A
)。 - 这是非常常用的命令。
-
git add -A
或git add --all
- 添加整个工作树中的所有更改到暂存区,包括:
- 修改的文件
- 新增的文件
- 删除的文件
- 当前目录、子目录以及父目录(相对于项目根目录)中的所有文件。
- 范围最广,最“彻底”的添加方式。
- 添加整个工作树中的所有更改到暂存区,包括:
-
git add -u
或git add --update
- 添加所有已被 Git 跟踪的文件(即已经在版本库中的文件)的更改到暂存区。
- 包括:修改的文件、删除的文件。
- 不包括: 新增的、未被跟踪的文件。
-
git add -p
或git add --patch
- 交互式地、分块地添加更改。 Git 会显示每个更改的“块”,并询问你是否要暂存该块、跳过、编辑等。这允许你非常精细地控制提交内容,只提交一个文件中的部分修改。
- 强烈推荐用于提交前审查代码和创建逻辑清晰的小提交。
-
git add -i
或git add --interactive
- 进入交互式暂存模式。提供一个基于文本的菜单,允许你查看未暂存/暂存的更改、暂存/取消暂存文件、添加未跟踪文件等,操作更丰富。
-
git add -e
或git add --edit
- 允许你手动编辑要暂存的补丁。高级用法。
-
git add -n
或git add --dry-run
- “试运行”。显示如果执行
git add
命令会添加哪些文件,但实际上不执行任何添加操作。用于查看效果。
- “试运行”。显示如果执行
重要注意事项
.gitignore
文件:git add
会忽略在.gitignore
文件中明确指定的文件和模式。如果git add
似乎没有添加你期望的文件,检查.gitignore
规则。- 暂存 vs 提交:
git add
只是将更改放入暂存区,并没有永久保存到仓库历史记录中。要永久保存,必须执行git commit
。 - 撤销暂存: 如果你不小心暂存了不想提交的文件,可以使用
git reset <file>
或git restore --staged <file>
命令将其从暂存区移回工作目录(更改内容保留)。 - 选择范围: 理解
git add .
、git add -A
和git add -u
之间的区别至关重要,它们添加的文件范围不同。 - 最佳实践:
- 经常使用
git status
查看哪些文件已修改、已暂存。 - 在提交前,仔细检查暂存区的内容(
git diff --staged
或git diff --cached
)。 - 尽量使用
git add -p
来创建更小、更专注的提交,而不是一次性提交所有改动。 - 只添加与本次提交目的相关的更改。
- 经常使用
总结
git add
是 Git 工作流中不可或缺的第一步。它让你能够精心挑选下一次提交应该包含哪些更改,将它们放入暂存区,为最终的 git commit
做好准备。熟练掌握 git add
及其常用选项(尤其是 .
, -A
, -u
, -p
)是高效使用 Git 的基础。