首页/开发/Git 与协作速查/git rebase --exec 逐提交验证
合并变基与冲突71 条

git rebase --exec 逐提交验证

在每条提交重放后执行指定命令(如测试),任一失败即暂停在对应提交;适合清理分支时确认每步都是可用状态。

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

逐提交执行命令

在每条提交重放完成后执行指定命令,例如运行测试;任一失败就暂停在对应提交上。它适合在整理分支时确认每一步都是可用状态,也常用来找出「哪一条提交把测试弄挂了」。

基本信息

用途逐提交执行命令,定位出问题的那一步
语法git rebase -i --exec '命令' <基点>
等价写法在待办清单里给每条提交追加一行执行指令
执行时机每条提交重放完成之后立即执行
失败处理暂停在该提交,修复后继续或中止整个变基

典型使用场景

  • 清理功能分支时确认每一步都能构建通过
  • 排查哪条提交引入了测试失败
  • 为后续二分排查保证中间状态都可用
  • 整理历史时同步跑一次格式检查
  • 把质量验证固化进历史整理流程

常用示例

常用示例
git rebase --exec 'npm test --silent' origin/main   # 每条提交后跑一次测试
git rebase -i --exec 'cargo test -q' HEAD~5         # 对最近五条提交逐条验证
git rebase --continue                                # 修好失败的提交后继续
git rebase --abort                                   # 放弃整个操作
git log --oneline -6                                 # 复核整理后的历史

过程信息与状态

提示含义
正在执行命令对当前提交运行验证命令
命令失败并暂停停在具体提交上,便于定位
成功则继续自动进入下一条提交
中止整个流程历史回到操作前状态
命令会在每个中间状态运行,因此必须可重复且不依赖外部环境;依赖本地临时文件或未启动服务的检查会误报失败。
逐条执行会让整个操作耗时成倍增加,先确认测试套件本身足够快且稳定,再用于日常整理。
验证命令失败时不会自动改动历史,仓库处于变基中间状态:要么修好当前提交并继续,要么中止让一切回到操作之前。
想验证的只是编译是否通过时,用最小的构建命令即可;把完整测试套件放进去,等待时间往往超过手工分段验证。

易错点

  • 验证命令依赖未提交的文件或本地服务,在历史状态里执行必然失败,误报容易让人怀疑代码本身有问题
  • 失败暂停后没处理就又去操作其他仓库状态,变基中间态被打断,收尾更麻烦
  • 把耗时很久的完整测试套件放在每条提交上,等待时间不可接受,操作常被中途放弃
  • 把该选项当成历史整理的默认动作,仓库越大失败点越多,应先在小范围试用

数据来源与参考

  • Git 官方文档:git-rebase(--exec)
  • Pro Git 2nd Edition · 7.6 重写历史
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌