Git 操作之压缩提交记录

Git 操作之压缩提交记录

背景

在浏览 Halo 仓库时,我注意到一个现象:无论一个 PR 中包含多少条提交记录,在最终合并后,仓库中通常只会保留一条合并提交记录。

实操

数据

PS D:\houxiongxiong\codes\GitHub\halo-theme\temp\theme-clarity> git log --oneline
abf463e (HEAD -> feat/pjax-rebase, feat/pjax-new) feat: 适配文本绘图插件
0667a38 (feat/pjax-next) feat(pjax): 增强元标签和结构化数据更新功能
814eefd fix(pjax): 修复移动端友链随机穿梭丢失问题
e1f4fc0 fix: 修复 PJAX 切换时侧边栏状态未重置的问题
34d3dcd feat(pjax): 适配 meta 标签
582489a docs(settings): 更新PJAX帮助文本,移除冗余说明
96d3807 docs(settings): 更新 PJAX 帮助文本以包含更多注意事项
cda82bc docs(pjax): 添加 PJAX 相关模块的代码注释
1c24339 feat(shop): 适配 pjax 模式
de74c89 fix(initActiveNavItem): 修正首页导航项在/page路径下的激活状态
2843ede feat: 在 pjax 加载时隐藏移动端侧边栏及相关元素
4caaf4f refactor(menu): 重构菜单交互
f06b4a1 feat: 添加链接提交初始化功能到组件重初始化流程
387b773 refactor(menu): 实现下拉菜单在PJAX中的状态保持
bd13813 feat: 初步实现 PJAX 功能
c7821ab Update theme.yaml

需求

压缩从 bd13813abf463e 之间的所有提交(共15个提交)。

示例

  1. 找到 bd13813 的父提交
    bd13813 的父提交是 c7821ab,所以需要从那里开始变基:

    git rebase -i c7821ab
  2. 编辑变基指令
    编辑器打开后,会看到类似这样的内容(从上到下是从旧到新):

    pick bd13813 feat: 初步实现 PJAX 功能
    pick 387b773 refactor(menu): 实现下拉菜单在PJAX中的状态保持
    pick f06b4a1 feat: 添加链接提交初始化功能到组件重初始化流程
    pick 4caaf4f refactor(menu): 重构菜单交互
    pick 2843ede feat: 在 pjax 加载时隐藏移动端侧边栏及相关元素
    pick de74c89 fix(initActiveNavItem): 修正首页导航项在/page路径下的激活状态
    pick 1c24339 feat(shop): 适配 pjax 模式
    pick cda82bc docs(pjax): 添加 PJAX 相关模块的代码注释
    pick 96d3807 docs(settings): 更新 PJAX 帮助文本以包含更多注意事项
    pick 582489a docs(settings): 更新PJAX帮助文本,移除冗余说明
    pick 34d3dcd feat(pjax): 适配 meta 标签
    pick e1f4fc0 fix: 修复 PJAX 切换时侧边栏状态未重置的问题
    pick 814eefd fix(pjax): 修复移动端友链随机穿梭丢失问题
    pick 0667a38 feat(pjax): 增强元标签和结构化数据更新功能
    pick abf463e feat: 适配文本绘图插件
  3. 修改指令
    将第一个 pick 保留,后面的所有 pick 改为 squash

    pick bd13813 feat: 初步实现 PJAX 功能
    squash 387b773 refactor(menu): 实现下拉菜单在PJAX中的状态保持
    squash f06b4a1 feat: 添加链接提交初始化功能到组件重初始化流程
    squash 4caaf4f refactor(menu): 重构菜单交互
    squash 2843ede feat: 在 pjax 加载时隐藏移动端侧边栏及相关元素
    squash de74c89 fix(initActiveNavItem): 修正首页导航项在/page路径下的激活状态
    squash 1c24339 feat(shop): 适配 pjax 模式
    squash cda82bc docs(pjax): 添加 PJAX 相关模块的代码注释
    squash 96d3807 docs(settings): 更新 PJAX 帮助文本以包含更多注意事项
    squash 582489a docs(settings): 更新PJAX帮助文本,移除冗余说明
    squash 34d3dcd feat(pjax): 适配 meta 标签
    squash e1f4fc0 fix: 修复 PJAX 切换时侧边栏状态未重置的问题
    squash 814eefd fix(pjax): 修复移动端友链随机穿梭丢失问题
    squash 0667a38 feat(pjax): 增强元标签和结构化数据更新功能
    squash abf463e feat: 适配文本绘图插件
  4. 保存并退出
    保存文件后,Git 会开始压缩提交。

  5. 编辑合并后的提交信息
    Git 会打开编辑器让用户编写新的提交信息。默认会列出所有被压缩的提交信息,可以做以下操作:

    • 保留所有信息

    • 删除部分信息

    • 重新编写一个概括性的提交信息

    例如:

    feat: 完整实现 PJAX 功能
    
    - 实现下拉菜单状态保持
    - 适配 meta 标签和结构化数据
    - 修复移动端相关问题
    - 适配文本绘图插件
  6. 完成变基
    保存提交信息后,变基完成。

LobeChat V1 版本关闭更新日志弹窗 2026-02-20

评论区