如何将my-branch rebase到staging-branch后将自有提交合并为2个
Git Rebase 并拆分提交操作指南
前置操作:完成 my-branch 到 staging-branch 的 rebase
先执行以下命令完成你期望的提交结构拼接:
- 切换到my-branch分支:
git checkout my-branch - 执行rebase操作:
git rebase staging-branch
操作完成后,my-branch的提交结构就会变成A---B---C---D---E---A5---A4---A3---A2---A1的形式。
核心操作:将5条自有提交合并为2条
你可以根据自己的使用习惯选择以下任意一种方法:
方法1:交互式rebase(按原有提交顺序合并)
适合你需要按原有提交的先后顺序分组合并的场景:
- 执行交互式rebase命令,指定操作最近5条提交:
git rebase -i HEAD~5 - 弹出的编辑页中会按从旧到新的顺序列出5条提交(第一行是最旧的A5,最后一行是最新的A1),默认前缀都是
pick - 调整前缀:把需要合并到第一个新提交A11的提交前缀从
pick改为s(squash缩写,代表合并到上一条pick的提交),剩下需要合并到A22的提交同样改前缀,示例配置:pick 哈希值A5 A5的提交信息 s 哈希值A4 A4的提交信息 s 哈希值A3 A3的提交信息 pick 哈希值A2 A2的提交信息 s 哈希值A1 A1的提交信息 - 保存退出编辑页后,git会先后弹出两次提交信息编辑框,分别输入A11、A22的提交信息保存即可完成合并。
方法2:soft reset 手动拆分提交
适合你需要按文件/功能灵活拆分两个提交的场景,也是你当前已知方法的扩展:
- 先回退5条提交,所有修改保留在工作区和暂存区:
git reset --soft HEAD~5 - 挑选需要放到第一个提交A11的修改,通过
git add 对应文件名或者git add -p选择部分改动加入暂存区 - 提交第一个新提交:
git commit -m "A11" - 把剩余未暂存的所有修改加入暂存区,提交第二个新提交:
git add . && git commit -m "A22"
推送更新到远端
由于你修改了分支的提交历史,需要强制推送覆盖远端分支:git push origin my-branch -f
如果是多人协作的公共分支,推送前请提前同步给其他协作人员,避免冲突。
内容的提问来源于stack exchange,提问作者RedFox
相关产品推荐
相关产品推荐

