You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Rebase移除并行提交历史 创建单一线性Git提交历史

结论

该需求完全可以实现,本质是清理非快进合并产生的分叉提交历史,通过Git的交互式rebase功能就能得到完全线性的提交记录。

注意:如果master是多人协作的公共分支,改写历史前务必和团队成员同步,避免其他成员本地的旧提交历史和远端新历史产生冲突。

操作前准备
  • 先给当前master打备份分支,操作失误可以随时回滚:
    git branch master-backup
    如果后续操作出问题,执行git reset --hard master-backup就能回到操作前的状态重试。
  • 切到master分支,确保工作区没有未提交的改动,临时改动可以用git stash暂存:
    git checkout master
操作步骤
  1. 先获取分叉前最后一个公共提交[M2]的哈希值,执行git log --oneline --graph可以直观看到提交线,找到对应[M2]的哈希串即可。
  2. 执行带合并提交保留参数的交互式rebase,基准点填刚才拿到的[M2]哈希:
    git rebase -i --rebase-merges <M2的commit哈希>
  3. 命令执行后会弹出文本编辑页,列出[M2]之后的所有提交,默认展示类似如下结构:
pick <M3哈希> M3对应的提交说明
pick <F1哈希> F1对应的提交说明
merge -C <合并提交哈希> Merge branch 'feature'
pick <M4哈希> M4对应的提交说明
pick <M5哈希> M5对应的提交说明
  1. 调整提交顺序,删除多余的合并提交:
  • 把pick <F1哈希> F1对应的提交说明这一行移动到M3条目下方
  • 直接删除开头为merge的那一行(也就是之前合并feature分支产生的合并提交),也可以把行首内容改成drop让Git自动跳过该提交
    调整完成后的列表顺序应该为:
pick <M3哈希> M3对应的提交说明
pick <F1哈希> F1对应的提交说明
pick <M4哈希> M4对应的提交说明
pick <M5哈希> M5对应的提交说明
  1. 保存关闭编辑器,Git会自动执行rebase流程。如果过程中提示代码冲突,手动编辑冲突文件解决后,依次执行:
    git add <已解决冲突的文件路径>
    git rebase --continue
    重复该操作直到rebase流程走完。
  2. 如果master分支关联了远端仓库,因为rebase改写了提交历史,推送需要用安全强制推送命令:
    git push --force-with-lease origin master
    *不要直接用-f/--force强制推送,--force-with-lease会先检查远端是否存在其他人新推送的提交,避免误覆盖他人的代码。
结果验证

执行git log --oneline --graph查看提交线,就能得到你预期的完全线性无分叉的结构:

[M1]-[M2]-[M3]-[F1]-[M4]-[M5]       -- Master Branch

确认结果无误后,如果不需要保留备份分支和旧的feature分支,可以执行git branch -D master-backup、git branch -d feature删除即可。

内容的提问来源于stack exchange,提问作者arthur.afarias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 15:15:32