拆分提交是什么
把一个大提交拆成多个小提交,标准做法是在交互式变基里把目标行改成 edit,让流程停在该提交之后;接着用 git reset HEAD^ 把改动退回工作区(注意默认模式保留内容),再分批 git add 与 commit,最后 git rebase --continue 继续。拆分后每个提交都应能独立通过构建与测试,做不到时保持为单个提交反而更诚实。
基本信息
| 用途 | 把粗粒度提交拆细 |
|---|---|
| 步骤 | rebase -i 标 edit → reset HEAD^ → add -p → 多次 commit → --continue |
| 配套命令 | git add -p 交互式暂存 |
| 安全前提 | 先建备份分支或记录提交号 |
| 平台 | 任意 Git 客户端 |
典型使用场景
- 一次提交里混了重构与功能,评审难以分辨
- 提交过大导致回滚粒度太粗
- 审计要求每步可独立验证,需要按逻辑切分
- 准备把改动回挑到别的分支,需要更细的粒度
- 把误合在一起的两件事分开,便于分别评审
- 整理个人分支历史,让主干读起来更清楚
操作步骤
操作步骤
git rebase -i HEAD~3 # 把目标行改为 edit,保存退出
git reset HEAD^ # 退回到该提交之前,改动留在工作区
git add -p # 逐块挑选第一组内容
git commit -m 'refactor: 提前抽出校验函数'
git add src/other.js
git commit -m 'feat: 新增错误处理'
git rebase --continue # 处理完冲突后继续过程中用到的命令
| 命令 | 作用 |
|---|---|
| rebase -i 标 edit | 停在目标提交,允许修改 |
| reset HEAD^ | 退回提交,默认保留改动 |
| add -p | 按片段挑选要暂存的内容 |
| rebase --continue | 继续后续提交的重放 |
拆分后每个提交都应能独立通过构建与测试,做不到时就保持为单个提交,形式上的整齐没有意义。
拆到一半用 --abort 会整体回退,之前的拆分会丢失;耗时较长时先建备份分支。
拆分的收尾核对
- git log --oneline 确认拆分后的提交条数与顺序
- 逐条查看信息是否与实际内容对应
- 确认每一条都能独立通过构建或测试
- 全部完成后核对工作区是否干净,没有遗漏未提交内容