首页/开发/Git 与协作速查/git commit 创建提交
Git 基础与命令88 条

git commit 创建提交

把暂存区内容记录为提交:默认打开编辑器撰写信息,-m 直接给出,-a 跳过手动暂存直接提交已跟踪文件的修改。

Git 与协作速查开发更新于 2026-10-13

git commit 是什么

git commit 把暂存区(index)里的内容固化成一次快照,成为仓库历史上一个不可变的提交对象。它只读取暂存区、不直接看工作区,所以改动必须先 git add。每个提交记录作者、提交者、时间戳、提交信息与父提交指针,Git 的分支、合并、回溯都建立在提交之上。

三区模型与提交边界

理解提交要先区分三个位置:工作区是磁盘上的文件,暂存区(index)是本次提交的取材区,HEAD 是上一个提交。git add 从工作区取到暂存区,git commit 把暂存区写成新提交并让 HEAD 前移。因为中间隔着暂存区,同一份文件可以只提交一半改动,也可以先攒多步再合成一次提交。

基本信息

适用平台Linux / macOS / Windows(Git 2.23 以上)
语法git commit [选项] [--] <路径>…
权限要求对仓库有写权限,不涉及系统权限
常用参数-m 信息;-a 已跟踪改动;--amend 修补;-F 读文件
高风险参数--no-verify 跳过钩子;--allow-empty 允许空提交

典型使用场景

  • 日常开发:add 之后写一条语义清晰的提交,留下可回滚的进度点
  • 紧急修复:一个 -m 直接完成提交,不用打开编辑器
  • 自动化脚本:CI 里用 -m 与 --author 指定信息与身份
  • 补漏:忘了加文件时先 add,再 --amend 补进上一条提交
  • 整理历史:先提交再 rebase -i 合并、拆分或改写信息
  • 多段信息:-m 传两次可以拼出主题与正文,不必进编辑器来回切换

常用示例

常用示例
git commit -m 'fix: 修正重试次数判断'          # 最常用:一行给出提交信息
git commit -a -m 'chore: 同步生成文件'         # 跳过 add,提交已跟踪文件的全部改动
git commit                                     # 打开编辑器,可写多段信息
git add -p && git commit -m 'refactor: 拆出校验函数'   # 只提交选定的补丁块
git commit --dry-run                           # 演练:不生成提交,先看会提交什么
git add forgotten.txt && git commit --amend --no-edit  # 把漏加文件补进上一条

提交结果怎么看

现象含义下一步
nothing to commit暂存区与 HEAD 一致改动还没 add,或确实没改动
[main 3f6a2b1] 3 files changed提交成功,中括号内是分支与短哈希用 git show 3f6a2b1 复核内容
Aborting commit due to empty message提交信息为空被拒补写信息,或确认是否要空信息提交
pre-commit 钩子报错中止本地校验没通过按提示修问题,别急着 --no-verify
Your branch is ahead by 1 commit本地领先远端一个提交需要同步时再 git push
HEAD detached 提示处于分离头指针状态要保留这次提交就先新建分支

常用选项速查

选项作用注意点
-m <信息>直接给出提交信息可重复使用,两段之间自动分隔
-a自动暂存已跟踪文件的修改不含新文件,删除同样需要 add
--amend替换上一条提交哈希变化,已推送则需强推
--no-verify跳过钩子校验谨慎使用,风险见下方坑点
-F <文件>从文件读取提交信息适合长信息与脚本生成
--author覆盖作者身份提交者仍是当前操作者

提交前自查组合

提交前自查组合
git status --short        # 逐行确认哪些文件会进这次提交
git diff --staged         # 通读即将提交的实际改动
git diff --cached --stat  # 先看规模,再决定阅读顺序
commit 只认暂存区。想只提交某几个文件的改动,就先 git add 指定路径再 commit;用 -a 会把所有已跟踪文件的改动一次性带走,容易混进无关内容。
--amend 会生成新的提交哈希,旧提交只能靠 reflog 找回;已推送的提交被 amend 后必须强推,会改写协作者看到的历史,共享分支上先确认无人基于旧提交工作。
提交信息建议首行不超过 50 字符、说明做了什么,空行之后写正文说明为什么这么做。团队若采用 Conventional Commits,首行形如 feat(scope): 描述,便于工具生成变更日志。
默认编辑器由 core.editor 与 GIT_EDITOR 环境变量决定。CI 或脚本环境里没有可交互的编辑器,务必带上 -m 或 -F,否则会一直停在等待输入的状态。

易错点

  • -a 只覆盖已跟踪文件,新建文件仍要先 git add,否则整份新文件会从这次提交里漏掉
  • 提交信息为空会按默认策略被拒;团队配了提交模板或钩子时按约定格式写,否则会被 CI 拦下
  • 习惯性加 --no-verify 会跳过 pre-commit 与 commit-msg 校验,把格式错误和坏改动直接写进历史
  • 提交发在错误分支上时,用 git cherry-pick 把提交拣选到正确分支,别用 reset --hard 硬删造成内容丢失

数据来源与参考

  • Git 官方文档:git-commit
  • Pro Git 2nd Edition · 2.3 查看提交历史
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌