>> >> >> Reference << << << <<<<<<Ref>>>>>>
commit
Modified: 2025-12-31 | Author:ljf12825

很多版本管理系统存储的是文件版本之间的差异。而Git存储的是快照
在Git里,每次commit会生成一个对象
commit = 一次不可变的快照(snapshot) + 元数据 + 父节点指针

commit
├── tree   (当前目录结构的快照)
├── parent (上一个 commit)
├── author / committer
├── message

这就形成了一条有向无环图(DAG)

A --- B --- C --- D

保存整个项目状态(通过tree + blob 哈希复用实现高效存储)
每一次Commit,Git都会保存当前所有被追踪文件的完整状态(实际上使用指针指向现有的文件对象,未修改的文件不会重复存储,只是链接到之前的相同文件)
一旦创建,Commit的Hash值(如a1b2c3d)就确定了。任何内容的改动(哪怕是一个空格)都会生成一个全新的Hash值

基础用法

git status
git add file.cpp
git commit -m "Add basic renderer init"
区域说明
工作区正在编辑的文件
暂存区(index)git add
仓库(HEAD)git commit

只能commit暂存区里的内容

commit message 规范

良好的提交信息格式能够帮助团队成员快速理解代码变更内容,方便代码审查和版本管理

典型的commit message格式

一个完整的commit message通常包含三部分:

<type>[optional scope]: <subject>

[optional body]

[optional footer]

常见的type类型

类型说明
feat新功能(feature)
fix修复 bug
docs文档(documentation)
style代码格式(不影响代码逻辑,比如空格、分号等)
refactor重构(既不是新增功能,也不是修复 bug)
perf性能优化
test添加测试
build构建过程或辅助工具变动
ci持续集成配置相关变动
chore其他杂项,比如构建流程、依赖管理更新
revert回滚某个提交

常见footer类型

关联Issue/PR

最常见的用法是说明当前提交解决了哪个问题或者与那个Issue/PR有关

Closes #123
Fixes #456
Refs #789

这些关键词会被GitHub/GitLab自动识别,合并PR时自动关闭对应issue

BREAKING CHANGE

如果该提交包含破坏性更改(如修改了函数签名、接口参数等),需要在footer明确说明,方便版本发布工具识别并升级主版本号

BREAKING CHANGE:登录接口参数从 username 改为 userName,客户端必须同步更改

这通常配合语义化版本发布工具使用

其他元信息

有时也可以在footer写一些团队内部约定的信息

示例

feat(login)添加了用户登录功能

实现用户名密码登录校验并添加对应的错误提示登录成功后跳转至首页
BREAKING CHANGE登录接口参数发生变更客户端需更新

建议

其他

OPTIONS