Skip to content

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 -Agit 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 add

2 个练习

练习 git add

查阅不认识的术语

新手友好的术语表用大白话解释编程术语——变量、函数、DOM、Promise 等等。

查看术语表

动手做项目

通过引导式项目应用所学,含起始代码与解决方案。

查看项目

解读错误信息

用大白话解释常见错误——什么意思、为什么发生、如何修复。

查看错误