Git 中文手册

git add 和 git commit 的区别,以及怎么只提交部分文件

2026-09-06 约 3 分钟阅读

新手最容易混的两个命令:add 是「选东西放进推车」,commit 是「把推车推走」,别再把它们当成一步。本文讲清暂存区概念、只提交指定文件、以及 add -p 部分暂存。

很多刚接触 Git 的人困惑:git addgit commit 明明都是「保存」,为什么要分两步?原因在于 Git 有一个中间地带叫暂存区(index/staging area)

一图理解三步走

工作区(你改的) → git add → 暂存区 → git commit → 本地仓库

  • git add = 挑选文件「准备提交」(像把商品放进购物车)
  • git commit = 把暂存区内容「打一个快照包」(像结账打包)

只 add 不 commit,改动不会成为历史记录;直接 commit 没 add 的内容则不会被包含。

日常操作

git add .                # 暂存所有改动(含新增/修改/删除)
git add 具体文件.txt      # 只暂存这一个文件
git add src/             # 暂存某个目录下所有改动
git status               # 查看哪些已暂存(绿)哪些还没(红)
git commit -m "说明"      # 把暂存区打包成一个提交

只提交一部分文件(而不是全部)

配合 git status 看清哪些改了,然后精确 add:

git add 文档.md 首页.vue   # 只挑这两个
git commit -m "只提交这两个文件"

这样同一个阶段的不同改动,就能拆成多个干净、独立、语义清晰的提交,方便回溯。

更精细:只提交某个文件的部分改动(add -p)

如果一个大文件里同时改了「功能 A」和「无关的格式调整」,想分开提交,用交互式暂存:

git add -p 文件.js

Git 会把改动按「块(hunk)」列出,问你是否暂存,选 y(是)/n(否)/s(拆分)等。这能产出非常干净的提交历史。

常见报错

  • nothing to commit, working tree clean:没有新的改动,自然无可提交。
  • 提交时发现漏了文件:还没 commit 就补 git add 再 commit;已经 commit 就用 --amend 并入。

一句话速记

先 add 选定内容、再 commit 固化;想分开提交用 add -p,想只提部分用精确 add 文件

?

常见问题 FAQ

git commit 不加 -m 会怎样?
会打开默认文本编辑器让你输入提交信息,不填写无法完成提交。建议始终用 git commit -m "说明" 直接指定。
git add . 和 git add -A 有区别吗?
在仓库根目录执行时两者基本相同。git add -A 会包含所有增删改;git add . 在当前目录下通常也包含删除。具体边界建议用 git status 确认。
提交后才发现忘了加某个文件怎么办?
若还没 push,用 git add 漏掉的文件 后再 git commit --amend --no-edit,可并入上一次提交而不新增记录。
git commit 是保存在本地还是推送到服务器?
只保存在本地仓库。要让别人看到,还需要 git push 推送到远程。commit 和 push 是两步。