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 折叠