git add 和 git commit 的区别,以及怎么只提交部分文件
新手最容易混的两个命令:add 是「选东西放进推车」,commit 是「把推车推走」,别再把它们当成一步。本文讲清暂存区概念、只提交指定文件、以及 add -p 部分暂存。
很多刚接触 Git 的人困惑:git add 和 git 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 是两步。