如何一次性合并所有分支共享的基础提交并推送到全部分支?
解决方案
要一次性合并底部3个提交并同步所有分支,你可以通过重写根提交历史,再将所有分支迁移到新的历史上,最后批量强制推送。具体步骤如下:
1. 备份所有分支(关键,防止操作失误)
先为所有分支创建本地备份,避免数据丢失:
# 逐个为分支创建备份 git checkout main && git branch main-backup git checkout project-creation && git branch project-creation-backup git checkout domain-creation && git branch domain-creation-backup git checkout menu-creation && git branch menu-creation-backup git checkout view-creation && git branch view-creation-backup
2. 合并底部3个提交(在main分支操作)
切换到main分支,执行根交互式变基:
git checkout main git rebase --root -i
在弹出的编辑器中,找到最底部的3个提交:
pick f7e61eb Initial commit pick b55de24 Initial commit : Added .gitignore pick 72defa9 (origin/main, main) Basic working project ...
将后两个提交的pick改为squash(保留提交信息)或fixup(丢弃提交信息,仅保留第一个提交的信息):
pick f7e61eb Initial commit squash b55de24 Initial commit : Added .gitignore squash 72defa9 Basic working project
保存退出后,编辑合并后的提交信息,完成后会得到一个合并后的根提交,记下它的哈希值(比如abc123)。
3. 将其他分支迁移到新历史上
对每个基于旧根提交的分支,用git rebase --onto把分支的提交移到新的合并提交之后:
# 替换 <新根哈希> 为你刚得到的合并提交哈希,72defa9是原来的旧根提交哈希 git rebase --onto <新根哈希> 72defa9 project-creation git rebase --onto <新根哈希> 72defa9 domain-creation git rebase --onto <新根哈希> 72defa9 menu-creation git rebase --onto <新根哈希> 72defa9 view-creation
如果遇到冲突,解决后执行git rebase --continue即可。由于仅合并根提交,后续提交内容未变,冲突概率极低。
4. 批量强制推送所有分支
因为重写了历史,需要强制推送到远程仓库:
git push origin --force main project-creation domain-creation menu-creation view-creation
注意事项
- 强制推送会覆盖远程仓库历史,必须确保所有团队成员知晓并同步操作,否则他们的本地分支会与远程冲突。
- 协作者若有基于旧历史的修改,需执行
git fetch origin,再用git rebase origin/<分支名>重新基于新历史,或git reset --hard origin/<分支名>(会丢失本地未推送的修改)。
内容的提问来源于stack exchange,提问作者JustAnotherDev
相关产品推荐
相关产品推荐

