git commit
用 git commit 将快照保存到历史,以及写好提交信息。
你将学到
- 如何用 git commit -m 创建提交
- 好的提交信息是什么样的
- 如何修正最后一次提交
- 暂存与提交的关系
概念讲解
git commit 做什么
git commit 把暂存区中的一切作为永久快照保存到仓库历史。每个提交获得一个唯一哈希(如 a1b2c3d)来永久标识。
git commit -m "Add user login page"
-m 标志让你内联写信息。没有它会打开文本编辑器(通常是 Vim 或 Nano)写更长的信息。
提交的解剖
一次提交记录:
- 所有暂存文件在该时刻的快照
- 作者姓名和邮箱(来自配置)
- 提交的时间戳
- 描述变更的提交信息
- 唯一标识此次提交的哈希(SHA-1)
- 指向父提交的指针(形成历史链)
写好的提交信息
好的提交信息回答:"我为什么做这个变更?" 代码本身展示了改了什么——信息应解释原因。
好的信息:
Add user login page with OAuthFix crash when cart is emptyRefactor payment logic into separate moduleUpdate README with installation steps
差的信息:
fix——修了什么?changes——什么变更?wip——什么进行中?asdf——毫无意义
约定式提交
许多项目遵循约定式提交格式,在信息前加类型前缀:
feat: add dark mode toggle
fix: correct total price calculation
docs: update API documentation
chore: upgrade dependencies
refactor: simplify auth flow
test: add unit tests for cart
这便于生成变更日志和自动化版本升级。
修正最后一次提交
如果提交信息有错别字或忘了暂存文件,可以修正最后一次提交而不新建:
# 只修信息
git commit --amend -m "Add user login page with OAuth and tests"
# 把忘掉的文件加入上次提交
git add forgotten-file.js
git commit --amend --no-edit
警告:永远不要修正已推送到共享远程的提交——它重写历史,会给其他开发者造成问题。
跳过暂存区
如果只提交被追踪文件的变更(无新文件),可以跳过 git add:
git commit -am "Update login styles"
-a 标志在提交前自动暂存已修改(但非新增)的文件。它不会暂存未追踪文件。
示例代码
# 分两步暂存和提交(标准工作流)
git add README.md
git commit -m "Add project README with setup instructions"
# 暂存所有并用约定式提交信息提交
git add .
git commit -m "feat: add user authentication with JWT"
# 一步提交所有已修改的被追踪文件(跳过未追踪)
git commit -am "fix: correct off-by-one error in pagination"
# 多行提交信息(省略 -m 会打开编辑器)
git commit -m "Refactor payment processing
- Extract validation into its own function
- Add error handling for declined cards
- Update tests to cover new flow"
# 修正最后一次提交(修信息中的错别字)
git commit --amend -m "feat: add user authentication with JWT tokens"
# 把忘掉的文件加入上次提交,不改信息
git add .env.example
git commit --amend --no-edit
展示了两步 add+commit、-a 快捷方式、多行信息、修正信息、添加遗漏文件。注意约定式提交风格(feat:、fix:)。
动手试一试
- Code Diff
提交前看看你的提交会包含什么。
- CI/CD YAML Generator
提交触发 CI 流水线——生成一个看看关联。
常见错误
错误写法
写模糊的提交信息如 'fix' 或 'changes'
正确做法
提交信息应解释为什么变更,而非只说改了什么(diff 已展示)。用约定式提交(feat:、fix:、docs:)保持一致,写清晰具体的信息。
错误写法
修正已推送到共享远程的提交
正确做法
git commit --amend 重写历史。如果已推送,修正会给拉取过的人造成冲突。只修正未推送的本地提交。
相关资源
相关代码片段
- Git Log Snippet
提交后查看提交历史。
相关速查表
- Git Cheatsheet
git commit 选项与信息约定。
练习 git commit
2 个练习
查阅不认识的术语
新手友好的术语表用大白话解释编程术语——变量、函数、DOM、Promise 等等。
动手做项目
通过引导式项目应用所学,含起始代码与解决方案。
解读错误信息
用大白话解释常见错误——什么意思、为什么发生、如何修复。