首页/开发/Git 与协作速查/git commit --fixup 生成修补提交
合并变基与冲突71 条

git commit --fixup 生成修补提交

为指定提交创建 fixup! 前缀的修补提交,之后配合 rebase --autosquash 自动折叠到目标提交,避免反复改写历史。

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

commit --fixup 是什么

git commit --fixup <目标提交> 会创建一个标题为 fixup! 加目标提交标题的修补提交,用于标记「这条提交是给某某提交的补丁」。它本身不改写任何历史,只是给后续的自动折叠留下线索:执行 git rebase -i --autosquash 时,Git 会把它自动排到目标提交之后并预置为 fixup 指令。配合使用可以把「补一处小问题」独立成提交,评审期间既清晰,合并前又能收干净。

基本信息

用途标记这条提交是给谁的补丁
语法git commit --fixup <目标提交>
配套git rebase -i --autosquash <基点>
行为生成 fixup! 前缀标题,不改写历史
平台任意 Git 客户端

典型使用场景

  • 评审提出小修改,先单独提交,通过后统一折叠
  • 补上遗漏的文件或修正注释,不想让历史里多一条孤立提交
  • 同一处反复微调,用 fixup 记录每轮改动
  • 保持评审期间历史可读,避免一边评审一边改写
  • 把「忘记加文件」这类碎提交收进目标提交
  • 配合钩子与自动折叠,形成稳定的个人提交流程

常用示例

常用示例
git log --oneline -5              # 找到目标提交,如 a1b2c3
git add src/login.js
git commit --fixup a1b2c3         # 生成 fixup! 前缀提交
git push origin feature/x         # 照常推送,不影响协作者
git rebase -i --autosquash origin/main   # 合并前一次性折叠

fixup 与 squash 的差别

前缀折叠动作提交信息
fixup!直接并入目标提交丢弃补丁提交的信息
squash!并入并停下来打开编辑器合并两段信息
修补提交先照常推送不影响他人;评审通过后再一次性折叠,中间过程对协作者友好,也避免了反复改写历史带来的哈希变化。
较新版本支持 --fixup=amend:<提交>(补正文)与 --fixup=reword:<提交>(只改标题),折叠时分别对应 amend 与 reword 指令。

修正一处改动的完整流程

  • git log --oneline -5 找到目标提交号
  • 改完内容后 git add 暂存
  • git commit --fixup <目标提交号> 生成补丁
  • 照常推送,评审意见落地后 rebase -i --autosquash 折叠

易错点

  • 目标提交不在变基范围内时不会折叠,基点要覆盖目标提交所在区段
  • 折叠后提交信息以目标提交为准,原修补提交的说明会丢失,重要内容请写进目标提交
  • 把 fixup 提交当作独立成果直接合并,主干上会留下一串 fixup! 标题
  • 折叠已推送的分支需要强推,先确认是个人分支并通知协作者
  • 标题被改写过的目标提交匹配不到前缀,折叠前核对 todo 清单里是否出现预期条目

数据来源与参考

  • Git 官方文档:git-commit(--fixup)
  • Git 官方文档:git-rebase(--autosquash)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌