Skip to content

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 OAuth
  • Fix crash when cart is empty
  • Refactor payment logic into separate module
  • Update 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:)。

动手试一试

常见错误

错误写法

写模糊的提交信息如 'fix' 或 'changes'

正确做法

提交信息应解释为什么变更,而非只说改了什么(diff 已展示)。用约定式提交(feat:、fix:、docs:)保持一致,写清晰具体的信息。

错误写法

修正已推送到共享远程的提交

正确做法

git commit --amend 重写历史。如果已推送,修正会给拉取过的人造成冲突。只修正未推送的本地提交。

相关代码片段

相关速查表

练习 git commit

2 个练习

练习 git commit

查阅不认识的术语

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

查看术语表

动手做项目

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

查看项目

解读错误信息

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

查看错误