背景与动机
提交代码前最重要的不是立刻 git add .,而是先弄清楚当前到底改了什么。
这一篇聚焦本地提交流程:
查看状态 -> 查看差异 -> 暂存变更 -> 再次确认 -> 提交这条流程能减少两类常见问题:把无关文件提交进去,或者漏掉真正要提交的文件。
核心原理拆解
1. git status:看仓库现在处于什么状态
git status 用来查看当前仓库状态:
git status重点关注三类信息:
- 哪些文件被修改但还没暂存。
- 哪些文件已经进入暂存区。
- 当前分支是否领先或落后远程分支。
如果输出太长,可以用简洁模式:
git status -sb简洁模式适合提交、拉取、切分支前快速确认当前状态。
2. git diff:看具体改了什么
git diff 用来查看工作区中尚未暂存的变更:
git diff查看已经暂存、准备提交的变更:
git diff --cached查看某个文件的变更:
git diff -- path/to/file提交前建议至少看一次 git diff 或 git diff --cached,避免把调试代码、临时配置或无关改动提交进去。
3. git add:把工作区变更放入暂存区
添加单个文件:
git add <file>添加当前目录下所有变更:
git add .交互式选择要暂存的变更块:
git add -pgit add . 很方便,但也容易把无关文件一起放进去。更稳妥的做法是先用 git status 看范围,再按文件或按块暂存。
4. git commit:把暂存区保存成本地提交
提交暂存区内容:
git commit -m "add user login api"一次好的提交应该满足两个条件:
- 只包含一个相对独立的意图。
- 提交信息能说明“做了什么”,而不是只写
update、fix。
如果刚提交完发现漏了文件,可以先补充暂存,再修改上一次提交:
git add <file>git commit --amend注意:已经推送给别人协作的提交,不要随意 --amend,否则会改写提交历史。
5. 工作区、暂存区、本地仓库流转图
下面这张图可以帮助理解 add 和 commit 的位置:

编辑文件 -> git add -> git commit工作区 -> 暂存区 -> 本地仓库常见工作流示例
提交一个功能改动
git status -sbgit diffgit add <file>git diff --cachedgit commit -m "add login form"这里的关键点是:git add 前看工作区差异,git commit 前看暂存区差异。
分块提交同一个文件
git add -pgit diff --cachedgit commit -m "refactor config loader"当一个文件里同时包含多个意图时,git add -p 可以只选择其中一部分进入当前提交。
常见陷阱
1. 把 git add . 当成无脑安全命令
git add . 会把当前目录下很多变更都放入暂存区,可能包含临时文件、调试代码或无关格式化结果。
更稳妥的方式是:
git add <file>git add -p2. 暂存后不再检查
git diff 默认只看未暂存变更。暂存后要看即将提交的内容,应使用:
git diff --cached3. 提交信息太模糊
update、fix、change 这类提交信息对未来排查问题帮助很小。提交信息至少要能看出变更目标。
一句话总结
本地提交的核心流程是:先用 status 和 diff 看清楚,再用 add 选择范围,最后用 commit 固化一次明确意图。