如何将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
相关产品推荐
相关产品推荐

