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

如何将Git主分支整理为直线提交历史且保留细粒度提交?

问题描述

提交历史示意图

当前我的Git提交历史如图所示。我尝试修改git merge操作之前的历史提交信息,但由于中间存在合并请求,我认为无法完成该操作。
请问如何在不丢失细粒度提交历史的前提下,将提交历史整理为直线?
我曾搜索到git merge squash相关方案,但因缺乏可视化指导,担心丢失提交历史而不敢尝试。

解决方案

要在保留所有细粒度提交的前提下把分叉历史整理为直线,推荐使用**交互式变基(interactive rebase)**替代合并操作,具体步骤如下:

  • 先确保工作区无未提交修改,执行:

    git status
    

    若有未提交内容,先提交或用git stash暂存。

  • 切换到主分支(如main或master):

    git checkout main
    
  • 执行交互式变基,将目标分支(假设为feature)的提交逐个迁移到主分支顶端,同时可修改提交信息:

    git rebase -i main feature
    

    若当前已在feature分支,也可直接执行:

    git rebase main
    
  • 在弹出的编辑器中,你会看到feature分支的所有提交列表:

    • 每个提交行开头是pick,表示保留该提交;
    • 若要修改某个提交的信息,将对应的pick改为reword(或简写r);
    • 保存并退出编辑器后,Git会逐个触发提交信息修改界面,完成编辑后即可更新对应提交的信息。
  • 变基完成后,feature分支的历史已变为基于最新主分支的线性结构。此时切换回主分支,执行快进合并即可让主分支历史变为直线:

    git checkout main
    git merge feature
    
  • 若分支已推送到远程仓库,变基后需强制推送(注意:仅当无其他协作者在该分支工作时执行,避免覆盖他人修改):

    git push -f origin feature
    

关于历史保留的说明

交互式变基只是重新编排提交的应用顺序,将分支的所有细粒度提交逐个“移植”到主分支顶端,所有提交都会完整保留,不会像squash合并那样丢失细粒度历史,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Kim Stacks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:35:09