git rebase如何自动跳过冲突提交 仅保留其余无冲突提交
Git自动跳过冲突提交、剔除问题提交的操作方案
核心操作逻辑
你需要将问题提交之后的所有提交重放到问题提交的父节点上,冲突的提交自动跳过,直接用Git内置rebase能力配合简单循环即可实现,无需额外工具。
具体步骤
- 提前备份原分支,避免操作失误丢失提交:
git branch backup_original_branch - 记录你通过bisect定位到的问题提交哈希值,记为
<BAD_COMMIT_HASH> - 执行rebase操作并自动跳过冲突提交,类Unix/Git Bash环境直接运行以下命令即可:
# 执行rebase,将问题提交之后的所有提交重定向到问题提交的父节点 git rebase --onto <BAD_COMMIT_HASH>^ <BAD_COMMIT_HASH> HEAD --skip-empty # 遇到冲突自动跳过,直到所有无冲突提交rebase完成 while [ $? -ne 0 ]; do git rebase --skip done
参数说明
--onto <BAD_COMMIT_HASH>^:指定重放提交的目标基底为问题提交的父提交,实现彻底剔除问题提交的效果<BAD_COMMIT_HASH> HEAD:指定需要重放的提交范围为问题提交之后到当前HEAD的所有提交,不包含问题提交本身--skip-empty:自动过滤重放后没有内容变更的空提交,避免生成无效提交记录- 循环逻辑:rebase遇到冲突时会返回非0退出码,循环会自动执行跳过指令,直到所有无冲突提交完成重放
- 如果你的分支包含合并提交,需要保留合并结构的话,在rebase命令中加上
--rebase-merges参数即可。
后续验证
操作完成后可以通过git log对比原分支备份的提交列表,确认被跳过的冲突提交数量和你预期的依赖问题提交的提交数量一致,测试通过后即可用当前分支替换原分支。
内容的提问来源于stack exchange,提问作者unDeadHerbs
相关产品推荐
相关产品推荐

