git add
用 git add 暂存变更——为下次提交准备文件。
你将学到
- 如何暂存单个文件、多个文件或所有文件
- git add . 和 git add -A 的区别
- 用 git add -p 暂存文件的一部分
- 暂存已暂存文件时会发生什么
概念讲解
git add 做什么
git add 把变更从工作目录移到暂存区。它告诉 Git:"我想把这些变更纳入下次提交。"此时还没有任何东西保存到历史——那由 git commit 完成。
git add README.md
暂存选项
# 暂存单个文件
git add README.md
# 暂存多个指定文件
git add index.html style.css script.js
# 暂存当前目录及子目录的所有变更
git add .
# 暂存整个仓库的所有变更(包括删除)
git add -A
# 等价于:
git add --all
# 暂存当前目录的所有变更(包括此处的删除)
git add -u
git add . vs git add -A
这是一个微妙但重要的区别:
git add .——暂存当前目录及其子目录中的新增和修改文件。旧版 Git(2.0 前)不会暂存删除。现代 Git(2.0+)会暂存当前目录树中的一切。git add -A——暂存整个仓库中的一切,包括删除,无论你在哪个目录。
最佳实践:初学时从仓库根目录用 git add -A 或 git add .。进阶后逐个暂存文件以保持提交聚焦。
暂存文件的一部分
有时同一文件中有多个不相关的变更,想分开提交。git add -p(补丁模式)让你逐块暂存:
git add -p script.js
Git 会展示每处变更并询问:y(是,暂存此块)、n(否)、s(拆成更小的块)、q(退出)。这对创建干净、聚焦的提交很有用。
重新暂存已修改的文件
如果你暂存了文件后又修改它,新变更并未暂存。暂存区保存的是你运行 git add 时的快照。需要再次 git add 以暂存最新变更:
git add README.md # 暂存版本 1
echo "more text" >> README.md # 现在是版本 2
git status # README 同时显示为已暂存和已修改
git add README.md # 重新暂存版本 2
git add 不做的事
- 它不会把任何东西保存到历史——那是
git commit。 - 它不会推送到远程——那是
git push。 - 它不会永久锁定变更——你可以用
git reset取消暂存。
示例代码
# 创建一些文件来操作
echo "# My Project" > README.md
echo "body { margin: 0; }" > style.css
echo "console.log('hi');" > script.js
# 暂存单个文件
git add README.md
git status # README.md 已暂存,其他未追踪
# 暂存其余
git add style.css script.js
git status # 三个都暂存了
# 暂存后修改文件
echo "## Installation" >> README.md
git status # README.md 同时显示为已暂存和已修改
# 重新暂存更新后的文件
git add README.md
git status # README.md 完全暂存
# 一次暂存所有(常见工作流)
git add .
git status
# 交互式暂存——暂存文件的一部分
git add -p script.js
展示了暂存单个文件、多个文件、修改后重新暂存的要求、暂存所有,以及交互式补丁模式。每条命令后用 git status 查看暂存状态。
动手试一试
- Code Diff
比较两个版本——暂存和提交时 Git 会显示差异。
- .gitignore Generator
用合适的 .gitignore 把文件挡在暂存区外。
常见错误
错误写法
暂存文件后编辑,却忘了重新暂存就提交
正确做法
git add 在运行时拍快照。之后编辑文件,新变更未暂存。提交前再次 git add,或检查 git status 看文件是否同时已暂存和已修改。
错误写法
用 git add . 意外暂存了本应忽略的文件
正确做法
先创建 .gitignore 排除构建产物、node_modules、.env 等。然后 git add . 会自动跳过它们。
相关资源
相关速查表
- Git Cheatsheet
git add 选项与暂存模式。
练习 git add
2 个练习
查阅不认识的术语
新手友好的术语表用大白话解释编程术语——变量、函数、DOM、Promise 等等。
动手做项目
通过引导式项目应用所学,含起始代码与解决方案。
解读错误信息
用大白话解释常见错误——什么意思、为什么发生、如何修复。